// $ANTLR 3.1.2 ObjectiveC2ansi.g 2010-12-10 14:45:50


using System;
using Antlr.Runtime;
using IList 		= System.Collections.IList;
using ArrayList 	= System.Collections.ArrayList;
using Stack 		= Antlr.Runtime.Collections.StackList;

using IDictionary	= System.Collections.IDictionary;
using Hashtable 	= System.Collections.Hashtable;


using Antlr.Runtime.Tree;

/**
* ObjectiveC version 2
* based on an LL ansic grammars and
* and ObjectiveC grammar found in Learning Object C
*
* It's a Work in progress, most of the .h file can be parsed
* June 2008 Cedric Cuche
**/
public class ObjectiveC2ansiParser : Parser 
{
    public static readonly string[] tokenNames = new string[] 
	{
        "<invalid>", 
		"<EOR>", 
		"<DOWN>", 
		"<UP>", 
		"CHARACTER_LITERAL", 
		"COMMENT", 
		"DECIMAL_LITERAL", 
		"EscapeSequence", 
		"Exponent", 
		"FLOATING_POINT_LITERAL", 
		"FloatTypeSuffix", 
		"HEX_LITERAL", 
		"HexDigit", 
		"IDENTIFIER", 
		"IntegerTypeSuffix", 
		"LETTER", 
		"LINE_COMMENT", 
		"OCTAL_LITERAL", 
		"OctalEscape", 
		"STRING_LITERAL", 
		"UnicodeEscape", 
		"WS", 
		"'-'", 
		"'--'", 
		"'!'", 
		"'!='", 
		"'\"'", 
		"'#define'", 
		"'#endif'", 
		"'#if'", 
		"'#ifdef'", 
		"'#ifndef'", 
		"'#import'", 
		"'#include'", 
		"'#undef'", 
		"'%'", 
		"'%='", 
		"'&'", 
		"'&&'", 
		"'&='", 
		"'('", 
		"')'", 
		"'*'", 
		"'*='", 
		"','", 
		"'.'", 
		"'...'", 
		"'.+'", 
		"'/'", 
		"'/='", 
		"':'", 
		"';'", 
		"'?'", 
		"'@catch'", 
		"'@class'", 
		"'@dynamic'", 
		"'@encode'", 
		"'@end'", 
		"'@finally'", 
		"'@implementation'", 
		"'@interface'", 
		"'@package'", 
		"'@private'", 
		"'@property'", 
		"'@protected'", 
		"'@protocol'", 
		"'@public'", 
		"'@selector'", 
		"'@synchronized'", 
		"'@synthesize'", 
		"'@throw'", 
		"'@trystatement'", 
		"'['", 
		"'\\\\'", 
		"']'", 
		"'^'", 
		"'^='", 
		"'{'", 
		"'|'", 
		"'||'", 
		"'|='", 
		"'}'", 
		"'~'", 
		"'+'", 
		"'++'", 
		"'+='", 
		"'<'", 
		"'<<'", 
		"'<<='", 
		"'<='", 
		"'='", 
		"'-='", 
		"'=='", 
		"'>'", 
		"'->'", 
		"'>='", 
		"'>>'", 
		"'>>='", 
		"'assign'", 
		"'atomic'", 
		"'auto'", 
		"'break'", 
		"'bycopy'", 
		"'byref'", 
		"'case'", 
		"'char'", 
		"'const'", 
		"'continue'", 
		"'copy'", 
		"'default'", 
		"'do'", 
		"'double'", 
		"'else'", 
		"'enum'", 
		"'extern'", 
		"'float'", 
		"'for'", 
		"'goto'", 
		"'id'", 
		"'if'", 
		"'in'", 
		"'inout'", 
		"'int'", 
		"'long'", 
		"'nonatomic'", 
		"'oneway'", 
		"'out'", 
		"'readonly'", 
		"'readwrite'", 
		"'register'", 
		"'retain'", 
		"'return'", 
		"'self'", 
		"'short'", 
		"'signed'", 
		"'sizeof'", 
		"'static'", 
		"'struct'", 
		"'super'", 
		"'switch'", 
		"'typedef'", 
		"'union'", 
		"'unsigned'", 
		"'void'", 
		"'volatile'", 
		"'while'"
    };

    public const int EOF = -1;
    public const int T__22 = 22;
    public const int T__23 = 23;
    public const int T__24 = 24;
    public const int T__25 = 25;
    public const int T__26 = 26;
    public const int T__27 = 27;
    public const int T__28 = 28;
    public const int T__29 = 29;
    public const int T__30 = 30;
    public const int T__31 = 31;
    public const int T__32 = 32;
    public const int T__33 = 33;
    public const int T__34 = 34;
    public const int T__35 = 35;
    public const int T__36 = 36;
    public const int T__37 = 37;
    public const int T__38 = 38;
    public const int T__39 = 39;
    public const int T__40 = 40;
    public const int T__41 = 41;
    public const int T__42 = 42;
    public const int T__43 = 43;
    public const int T__44 = 44;
    public const int T__45 = 45;
    public const int T__46 = 46;
    public const int T__47 = 47;
    public const int T__48 = 48;
    public const int T__49 = 49;
    public const int T__50 = 50;
    public const int T__51 = 51;
    public const int T__52 = 52;
    public const int T__53 = 53;
    public const int T__54 = 54;
    public const int T__55 = 55;
    public const int T__56 = 56;
    public const int T__57 = 57;
    public const int T__58 = 58;
    public const int T__59 = 59;
    public const int T__60 = 60;
    public const int T__61 = 61;
    public const int T__62 = 62;
    public const int T__63 = 63;
    public const int T__64 = 64;
    public const int T__65 = 65;
    public const int T__66 = 66;
    public const int T__67 = 67;
    public const int T__68 = 68;
    public const int T__69 = 69;
    public const int T__70 = 70;
    public const int T__71 = 71;
    public const int T__72 = 72;
    public const int T__73 = 73;
    public const int T__74 = 74;
    public const int T__75 = 75;
    public const int T__76 = 76;
    public const int T__77 = 77;
    public const int T__78 = 78;
    public const int T__79 = 79;
    public const int T__80 = 80;
    public const int T__81 = 81;
    public const int T__82 = 82;
    public const int T__83 = 83;
    public const int T__84 = 84;
    public const int T__85 = 85;
    public const int T__86 = 86;
    public const int T__87 = 87;
    public const int T__88 = 88;
    public const int T__89 = 89;
    public const int T__90 = 90;
    public const int T__91 = 91;
    public const int T__92 = 92;
    public const int T__93 = 93;
    public const int T__94 = 94;
    public const int T__95 = 95;
    public const int T__96 = 96;
    public const int T__97 = 97;
    public const int T__98 = 98;
    public const int T__99 = 99;
    public const int T__100 = 100;
    public const int T__101 = 101;
    public const int T__102 = 102;
    public const int T__103 = 103;
    public const int T__104 = 104;
    public const int T__105 = 105;
    public const int T__106 = 106;
    public const int T__107 = 107;
    public const int T__108 = 108;
    public const int T__109 = 109;
    public const int T__110 = 110;
    public const int T__111 = 111;
    public const int T__112 = 112;
    public const int T__113 = 113;
    public const int T__114 = 114;
    public const int T__115 = 115;
    public const int T__116 = 116;
    public const int T__117 = 117;
    public const int T__118 = 118;
    public const int T__119 = 119;
    public const int T__120 = 120;
    public const int T__121 = 121;
    public const int T__122 = 122;
    public const int T__123 = 123;
    public const int T__124 = 124;
    public const int T__125 = 125;
    public const int T__126 = 126;
    public const int T__127 = 127;
    public const int T__128 = 128;
    public const int T__129 = 129;
    public const int T__130 = 130;
    public const int T__131 = 131;
    public const int T__132 = 132;
    public const int T__133 = 133;
    public const int T__134 = 134;
    public const int T__135 = 135;
    public const int T__136 = 136;
    public const int T__137 = 137;
    public const int T__138 = 138;
    public const int T__139 = 139;
    public const int T__140 = 140;
    public const int T__141 = 141;
    public const int T__142 = 142;
    public const int T__143 = 143;
    public const int T__144 = 144;
    public const int T__145 = 145;
    public const int CHARACTER_LITERAL = 4;
    public const int COMMENT = 5;
    public const int DECIMAL_LITERAL = 6;
    public const int EscapeSequence = 7;
    public const int Exponent = 8;
    public const int FLOATING_POINT_LITERAL = 9;
    public const int FloatTypeSuffix = 10;
    public const int HEX_LITERAL = 11;
    public const int HexDigit = 12;
    public const int IDENTIFIER = 13;
    public const int IntegerTypeSuffix = 14;
    public const int LETTER = 15;
    public const int LINE_COMMENT = 16;
    public const int OCTAL_LITERAL = 17;
    public const int OctalEscape = 18;
    public const int STRING_LITERAL = 19;
    public const int UnicodeEscape = 20;
    public const int WS = 21;

    // delegates
    // delegators



        public ObjectiveC2ansiParser(ITokenStream input)
    		: this(input, new RecognizerSharedState()) {
        }

        public ObjectiveC2ansiParser(ITokenStream input, RecognizerSharedState state)
    		: base(input, state) {
            InitializeCyclicDFAs();

             
       }
        
    protected ITreeAdaptor adaptor = new CommonTreeAdaptor();

    public ITreeAdaptor TreeAdaptor
    {
        get { return this.adaptor; }
        set {
    	this.adaptor = value;
    	}
    }

    override public string[] TokenNames {
		get { return ObjectiveC2ansiParser.tokenNames; }
    }

    override public string GrammarFileName {
		get { return "ObjectiveC2ansi.g"; }
    }


    public class translation_unit_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "translation_unit"
    // ObjectiveC2ansi.g:18:0: translation_unit : ( external_declaration )+ EOF ;
    public ObjectiveC2ansiParser.translation_unit_return translation_unit() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.translation_unit_return retval = new ObjectiveC2ansiParser.translation_unit_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken EOF2 = null;
        ObjectiveC2ansiParser.external_declaration_return external_declaration1 = null;


        object EOF2_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:18:19: ( ( external_declaration )+ EOF )
            // ObjectiveC2ansi.g:18:19: ( external_declaration )+ EOF
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:18:19: ( external_declaration )+
            	int cnt1 = 0;
            	do 
            	{
            	    int alt1 = 2;
            	    int LA1_0 = input.LA(1);

            	    if ( (LA1_0 == COMMENT || LA1_0 == IDENTIFIER || LA1_0 == LINE_COMMENT || (LA1_0 >= 27 && LA1_0 <= 34) || LA1_0 == 54 || (LA1_0 >= 59 && LA1_0 <= 60) || LA1_0 == 65 || LA1_0 == 100 || (LA1_0 >= 102 && LA1_0 <= 103) || (LA1_0 >= 105 && LA1_0 <= 106) || LA1_0 == 111 || (LA1_0 >= 113 && LA1_0 <= 115) || LA1_0 == 118 || (LA1_0 >= 120 && LA1_0 <= 123) || (LA1_0 >= 125 && LA1_0 <= 126) || LA1_0 == 129 || (LA1_0 >= 133 && LA1_0 <= 134) || (LA1_0 >= 136 && LA1_0 <= 137) || (LA1_0 >= 140 && LA1_0 <= 144)) )
            	    {
            	        alt1 = 1;
            	    }


            	    switch (alt1) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:0:0: external_declaration
            			    {

            			    	PushFollow(FOLLOW_external_declaration_in_translation_unit38);
            			    	external_declaration1 = external_declaration();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, external_declaration1.Tree);

            			    }
            			    break;

            			default:
            			    if ( cnt1 >= 1 ) goto loop1;
            			    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            		            EarlyExitException eee1 =
            		                new EarlyExitException(1, input);
            		            throw eee1;
            	    }
            	    cnt1++;
            	} while (true);

            	loop1:
            		;	// Stops C# compiler whining that label 'loop1' has no statements

            	EOF2=(IToken)Match(input,EOF,FOLLOW_EOF_in_translation_unit41); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{EOF2_tree = (object)adaptor.Create(EOF2);
            		adaptor.AddChild(root_0, EOF2_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "translation_unit"

    public class external_declaration_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "external_declaration"
    // ObjectiveC2ansi.g:20:0: external_declaration : ( COMMENT | LINE_COMMENT | preprocessor_declaration | function_definition | declaration | class_interface | class_implementation | category_interface | category_implementation | protocol_declaration | protocol_declaration_list | class_declaration_list );
    public ObjectiveC2ansiParser.external_declaration_return external_declaration() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.external_declaration_return retval = new ObjectiveC2ansiParser.external_declaration_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken COMMENT3 = null;
        IToken LINE_COMMENT4 = null;
        ObjectiveC2ansiParser.preprocessor_declaration_return preprocessor_declaration5 = null;

        ObjectiveC2ansiParser.function_definition_return function_definition6 = null;

        ObjectiveC2ansiParser.declaration_return declaration7 = null;

        ObjectiveC2ansiParser.class_interface_return class_interface8 = null;

        ObjectiveC2ansiParser.class_implementation_return class_implementation9 = null;

        ObjectiveC2ansiParser.category_interface_return category_interface10 = null;

        ObjectiveC2ansiParser.category_implementation_return category_implementation11 = null;

        ObjectiveC2ansiParser.protocol_declaration_return protocol_declaration12 = null;

        ObjectiveC2ansiParser.protocol_declaration_list_return protocol_declaration_list13 = null;

        ObjectiveC2ansiParser.class_declaration_list_return class_declaration_list14 = null;


        object COMMENT3_tree=null;
        object LINE_COMMENT4_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:21:0: ( COMMENT | LINE_COMMENT | preprocessor_declaration | function_definition | declaration | class_interface | class_implementation | category_interface | category_implementation | protocol_declaration | protocol_declaration_list | class_declaration_list )
            int alt2 = 12;
            alt2 = dfa2.Predict(input);
            switch (alt2) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:21:0: COMMENT
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	COMMENT3=(IToken)Match(input,COMMENT,FOLLOW_COMMENT_in_external_declaration48); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{COMMENT3_tree = (object)adaptor.Create(COMMENT3);
                    		adaptor.AddChild(root_0, COMMENT3_tree);
                    	}

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:21:11: LINE_COMMENT
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	LINE_COMMENT4=(IToken)Match(input,LINE_COMMENT,FOLLOW_LINE_COMMENT_in_external_declaration52); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{LINE_COMMENT4_tree = (object)adaptor.Create(LINE_COMMENT4);
                    		adaptor.AddChild(root_0, LINE_COMMENT4_tree);
                    	}

                    }
                    break;
                case 3 :
                    // ObjectiveC2ansi.g:21:26: preprocessor_declaration
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_preprocessor_declaration_in_external_declaration56);
                    	preprocessor_declaration5 = preprocessor_declaration();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, preprocessor_declaration5.Tree);

                    }
                    break;
                case 4 :
                    // ObjectiveC2ansi.g:22:2: function_definition
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_function_definition_in_external_declaration59);
                    	function_definition6 = function_definition();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, function_definition6.Tree);

                    }
                    break;
                case 5 :
                    // ObjectiveC2ansi.g:23:3: declaration
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_declaration_in_external_declaration63);
                    	declaration7 = declaration();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, declaration7.Tree);

                    }
                    break;
                case 6 :
                    // ObjectiveC2ansi.g:24:3: class_interface
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_class_interface_in_external_declaration68);
                    	class_interface8 = class_interface();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, class_interface8.Tree);

                    }
                    break;
                case 7 :
                    // ObjectiveC2ansi.g:25:3: class_implementation
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_class_implementation_in_external_declaration72);
                    	class_implementation9 = class_implementation();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, class_implementation9.Tree);

                    }
                    break;
                case 8 :
                    // ObjectiveC2ansi.g:26:3: category_interface
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_category_interface_in_external_declaration76);
                    	category_interface10 = category_interface();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, category_interface10.Tree);

                    }
                    break;
                case 9 :
                    // ObjectiveC2ansi.g:27:3: category_implementation
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_category_implementation_in_external_declaration80);
                    	category_implementation11 = category_implementation();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, category_implementation11.Tree);

                    }
                    break;
                case 10 :
                    // ObjectiveC2ansi.g:28:3: protocol_declaration
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_protocol_declaration_in_external_declaration84);
                    	protocol_declaration12 = protocol_declaration();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, protocol_declaration12.Tree);

                    }
                    break;
                case 11 :
                    // ObjectiveC2ansi.g:29:3: protocol_declaration_list
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_protocol_declaration_list_in_external_declaration88);
                    	protocol_declaration_list13 = protocol_declaration_list();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, protocol_declaration_list13.Tree);

                    }
                    break;
                case 12 :
                    // ObjectiveC2ansi.g:30:3: class_declaration_list
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_class_declaration_list_in_external_declaration92);
                    	class_declaration_list14 = class_declaration_list();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, class_declaration_list14.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "external_declaration"

    public class preprocessor_declaration_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "preprocessor_declaration"
    // ObjectiveC2ansi.g:32:0: preprocessor_declaration : ( '#import' file_specification | '#include' file_specification | '#define' macro_specification | '#ifdef' expression | '#if' expression | '#undef' expression | '#ifndef' expression | '#endif' );
    public ObjectiveC2ansiParser.preprocessor_declaration_return preprocessor_declaration() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.preprocessor_declaration_return retval = new ObjectiveC2ansiParser.preprocessor_declaration_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal15 = null;
        IToken string_literal17 = null;
        IToken string_literal19 = null;
        IToken string_literal21 = null;
        IToken string_literal23 = null;
        IToken string_literal25 = null;
        IToken string_literal27 = null;
        IToken string_literal29 = null;
        ObjectiveC2ansiParser.file_specification_return file_specification16 = null;

        ObjectiveC2ansiParser.file_specification_return file_specification18 = null;

        ObjectiveC2ansiParser.macro_specification_return macro_specification20 = null;

        ObjectiveC2ansiParser.expression_return expression22 = null;

        ObjectiveC2ansiParser.expression_return expression24 = null;

        ObjectiveC2ansiParser.expression_return expression26 = null;

        ObjectiveC2ansiParser.expression_return expression28 = null;


        object string_literal15_tree=null;
        object string_literal17_tree=null;
        object string_literal19_tree=null;
        object string_literal21_tree=null;
        object string_literal23_tree=null;
        object string_literal25_tree=null;
        object string_literal27_tree=null;
        object string_literal29_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:33:0: ( '#import' file_specification | '#include' file_specification | '#define' macro_specification | '#ifdef' expression | '#if' expression | '#undef' expression | '#ifndef' expression | '#endif' )
            int alt3 = 8;
            switch ( input.LA(1) ) 
            {
            case 32:
            	{
                alt3 = 1;
                }
                break;
            case 33:
            	{
                alt3 = 2;
                }
                break;
            case 27:
            	{
                alt3 = 3;
                }
                break;
            case 30:
            	{
                alt3 = 4;
                }
                break;
            case 29:
            	{
                alt3 = 5;
                }
                break;
            case 34:
            	{
                alt3 = 6;
                }
                break;
            case 31:
            	{
                alt3 = 7;
                }
                break;
            case 28:
            	{
                alt3 = 8;
                }
                break;
            	default:
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d3s0 =
            	        new NoViableAltException("", 3, 0, input);

            	    throw nvae_d3s0;
            }

            switch (alt3) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:33:0: '#import' file_specification
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal15=(IToken)Match(input,32,FOLLOW_32_in_preprocessor_declaration99); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal15_tree = (object)adaptor.Create(string_literal15);
                    		adaptor.AddChild(root_0, string_literal15_tree);
                    	}
                    	PushFollow(FOLLOW_file_specification_in_preprocessor_declaration101);
                    	file_specification16 = file_specification();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, file_specification16.Tree);

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:34:3: '#include' file_specification
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal17=(IToken)Match(input,33,FOLLOW_33_in_preprocessor_declaration105); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal17_tree = (object)adaptor.Create(string_literal17);
                    		adaptor.AddChild(root_0, string_literal17_tree);
                    	}
                    	PushFollow(FOLLOW_file_specification_in_preprocessor_declaration107);
                    	file_specification18 = file_specification();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, file_specification18.Tree);

                    }
                    break;
                case 3 :
                    // ObjectiveC2ansi.g:35:3: '#define' macro_specification
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal19=(IToken)Match(input,27,FOLLOW_27_in_preprocessor_declaration111); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal19_tree = (object)adaptor.Create(string_literal19);
                    		adaptor.AddChild(root_0, string_literal19_tree);
                    	}
                    	PushFollow(FOLLOW_macro_specification_in_preprocessor_declaration113);
                    	macro_specification20 = macro_specification();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, macro_specification20.Tree);

                    }
                    break;
                case 4 :
                    // ObjectiveC2ansi.g:36:3: '#ifdef' expression
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal21=(IToken)Match(input,30,FOLLOW_30_in_preprocessor_declaration117); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal21_tree = (object)adaptor.Create(string_literal21);
                    		adaptor.AddChild(root_0, string_literal21_tree);
                    	}
                    	PushFollow(FOLLOW_expression_in_preprocessor_declaration119);
                    	expression22 = expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression22.Tree);

                    }
                    break;
                case 5 :
                    // ObjectiveC2ansi.g:37:3: '#if' expression
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal23=(IToken)Match(input,29,FOLLOW_29_in_preprocessor_declaration123); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal23_tree = (object)adaptor.Create(string_literal23);
                    		adaptor.AddChild(root_0, string_literal23_tree);
                    	}
                    	PushFollow(FOLLOW_expression_in_preprocessor_declaration125);
                    	expression24 = expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression24.Tree);

                    }
                    break;
                case 6 :
                    // ObjectiveC2ansi.g:38:3: '#undef' expression
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal25=(IToken)Match(input,34,FOLLOW_34_in_preprocessor_declaration129); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal25_tree = (object)adaptor.Create(string_literal25);
                    		adaptor.AddChild(root_0, string_literal25_tree);
                    	}
                    	PushFollow(FOLLOW_expression_in_preprocessor_declaration131);
                    	expression26 = expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression26.Tree);

                    }
                    break;
                case 7 :
                    // ObjectiveC2ansi.g:39:3: '#ifndef' expression
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal27=(IToken)Match(input,31,FOLLOW_31_in_preprocessor_declaration135); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal27_tree = (object)adaptor.Create(string_literal27);
                    		adaptor.AddChild(root_0, string_literal27_tree);
                    	}
                    	PushFollow(FOLLOW_expression_in_preprocessor_declaration137);
                    	expression28 = expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression28.Tree);

                    }
                    break;
                case 8 :
                    // ObjectiveC2ansi.g:40:3: '#endif'
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	string_literal29=(IToken)Match(input,28,FOLLOW_28_in_preprocessor_declaration141); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal29_tree = (object)adaptor.Create(string_literal29);
                    		adaptor.AddChild(root_0, string_literal29_tree);
                    	}

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "preprocessor_declaration"

    public class file_specification_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "file_specification"
    // ObjectiveC2ansi.g:42:0: file_specification : ( '<' | '\"' ) ( IDENTIFIER ( '/' | '\\\\' | '.' )? )+ ( '>' | '\"' ) ;
    public ObjectiveC2ansiParser.file_specification_return file_specification() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.file_specification_return retval = new ObjectiveC2ansiParser.file_specification_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken set30 = null;
        IToken IDENTIFIER31 = null;
        IToken set32 = null;
        IToken set33 = null;

        object set30_tree=null;
        object IDENTIFIER31_tree=null;
        object set32_tree=null;
        object set33_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:42:21: ( ( '<' | '\"' ) ( IDENTIFIER ( '/' | '\\\\' | '.' )? )+ ( '>' | '\"' ) )
            // ObjectiveC2ansi.g:42:21: ( '<' | '\"' ) ( IDENTIFIER ( '/' | '\\\\' | '.' )? )+ ( '>' | '\"' )
            {
            	root_0 = (object)adaptor.GetNilNode();

            	set30 = (IToken)input.LT(1);
            	if ( input.LA(1) == 26 || input.LA(1) == 86 ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set30));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}

            	// ObjectiveC2ansi.g:42:30: ( IDENTIFIER ( '/' | '\\\\' | '.' )? )+
            	int cnt5 = 0;
            	do 
            	{
            	    int alt5 = 2;
            	    int LA5_0 = input.LA(1);

            	    if ( (LA5_0 == IDENTIFIER) )
            	    {
            	        alt5 = 1;
            	    }


            	    switch (alt5) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:42:31: IDENTIFIER ( '/' | '\\\\' | '.' )?
            			    {

            			    	IDENTIFIER31=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_file_specification154); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{IDENTIFIER31_tree = (object)adaptor.Create(IDENTIFIER31);
            			    		adaptor.AddChild(root_0, IDENTIFIER31_tree);
            			    	}
            			    	// ObjectiveC2ansi.g:42:42: ( '/' | '\\\\' | '.' )?
            			    	int alt4 = 2;
            			    	int LA4_0 = input.LA(1);

            			    	if ( (LA4_0 == 45 || LA4_0 == 48 || LA4_0 == 73) )
            			    	{
            			    	    alt4 = 1;
            			    	}
            			    	switch (alt4) 
            			    	{
            			    	    case 1 :
            			    	        // ObjectiveC2ansi.g:
            			    	        {
            			    	        	set32 = (IToken)input.LT(1);
            			    	        	if ( input.LA(1) == 45 || input.LA(1) == 48 || input.LA(1) == 73 ) 
            			    	        	{
            			    	        	    input.Consume();
            			    	        	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set32));
            			    	        	    state.errorRecovery = false;state.failed = false;
            			    	        	}
            			    	        	else 
            			    	        	{
            			    	        	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            			    	        	    MismatchedSetException mse = new MismatchedSetException(null,input);
            			    	        	    throw mse;
            			    	        	}


            			    	        }
            			    	        break;

            			    	}


            			    }
            			    break;

            			default:
            			    if ( cnt5 >= 1 ) goto loop5;
            			    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            		            EarlyExitException eee5 =
            		                new EarlyExitException(5, input);
            		            throw eee5;
            	    }
            	    cnt5++;
            	} while (true);

            	loop5:
            		;	// Stops C# compiler whining that label 'loop5' has no statements

            	set33 = (IToken)input.LT(1);
            	if ( input.LA(1) == 26 || input.LA(1) == 93 ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set33));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "file_specification"

    public class macro_specification_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "macro_specification"
    // ObjectiveC2ansi.g:44:0: macro_specification : '.+' ;
    public ObjectiveC2ansiParser.macro_specification_return macro_specification() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.macro_specification_return retval = new ObjectiveC2ansiParser.macro_specification_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal34 = null;

        object string_literal34_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:44:22: ( '.+' )
            // ObjectiveC2ansi.g:44:22: '.+'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal34=(IToken)Match(input,47,FOLLOW_47_in_macro_specification184); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal34_tree = (object)adaptor.Create(string_literal34);
            		adaptor.AddChild(root_0, string_literal34_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "macro_specification"

    public class class_interface_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "class_interface"
    // ObjectiveC2ansi.g:46:0: class_interface : '@interface' ( class_name ( ':' superclass_name )? ( protocol_reference_list )? ( instance_variables )? ( properties_list )? ( interface_declaration_list )? ) '@end' ;
    public ObjectiveC2ansiParser.class_interface_return class_interface() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.class_interface_return retval = new ObjectiveC2ansiParser.class_interface_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal35 = null;
        IToken char_literal37 = null;
        IToken string_literal43 = null;
        ObjectiveC2ansiParser.class_name_return class_name36 = null;

        ObjectiveC2ansiParser.superclass_name_return superclass_name38 = null;

        ObjectiveC2ansiParser.protocol_reference_list_return protocol_reference_list39 = null;

        ObjectiveC2ansiParser.instance_variables_return instance_variables40 = null;

        ObjectiveC2ansiParser.properties_list_return properties_list41 = null;

        ObjectiveC2ansiParser.interface_declaration_list_return interface_declaration_list42 = null;


        object string_literal35_tree=null;
        object char_literal37_tree=null;
        object string_literal43_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:47:2: ( '@interface' ( class_name ( ':' superclass_name )? ( protocol_reference_list )? ( instance_variables )? ( properties_list )? ( interface_declaration_list )? ) '@end' )
            // ObjectiveC2ansi.g:47:2: '@interface' ( class_name ( ':' superclass_name )? ( protocol_reference_list )? ( instance_variables )? ( properties_list )? ( interface_declaration_list )? ) '@end'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal35=(IToken)Match(input,60,FOLLOW_60_in_class_interface192); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal35_tree = (object)adaptor.Create(string_literal35);
            		adaptor.AddChild(root_0, string_literal35_tree);
            	}
            	// ObjectiveC2ansi.g:48:2: ( class_name ( ':' superclass_name )? ( protocol_reference_list )? ( instance_variables )? ( properties_list )? ( interface_declaration_list )? )
            	// ObjectiveC2ansi.g:49:2: class_name ( ':' superclass_name )? ( protocol_reference_list )? ( instance_variables )? ( properties_list )? ( interface_declaration_list )?
            	{
            		PushFollow(FOLLOW_class_name_in_class_interface198);
            		class_name36 = class_name();
            		state.followingStackPointer--;
            		if (state.failed) return retval;
            		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, class_name36.Tree);
            		// ObjectiveC2ansi.g:49:13: ( ':' superclass_name )?
            		int alt6 = 2;
            		int LA6_0 = input.LA(1);

            		if ( (LA6_0 == 50) )
            		{
            		    alt6 = 1;
            		}
            		switch (alt6) 
            		{
            		    case 1 :
            		        // ObjectiveC2ansi.g:49:14: ':' superclass_name
            		        {

            		        	char_literal37=(IToken)Match(input,50,FOLLOW_50_in_class_interface201); if (state.failed) return retval;
            		        	if ( state.backtracking == 0 )
            		        	{char_literal37_tree = (object)adaptor.Create(char_literal37);
            		        		adaptor.AddChild(root_0, char_literal37_tree);
            		        	}
            		        	PushFollow(FOLLOW_superclass_name_in_class_interface203);
            		        	superclass_name38 = superclass_name();
            		        	state.followingStackPointer--;
            		        	if (state.failed) return retval;
            		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, superclass_name38.Tree);

            		        }
            		        break;

            		}

            		// ObjectiveC2ansi.g:50:2: ( protocol_reference_list )?
            		int alt7 = 2;
            		int LA7_0 = input.LA(1);

            		if ( (LA7_0 == 86) )
            		{
            		    alt7 = 1;
            		}
            		switch (alt7) 
            		{
            		    case 1 :
            		        // ObjectiveC2ansi.g:50:4: protocol_reference_list
            		        {

            		        	PushFollow(FOLLOW_protocol_reference_list_in_class_interface210);
            		        	protocol_reference_list39 = protocol_reference_list();
            		        	state.followingStackPointer--;
            		        	if (state.failed) return retval;
            		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, protocol_reference_list39.Tree);

            		        }
            		        break;

            		}

            		// ObjectiveC2ansi.g:51:2: ( instance_variables )?
            		int alt8 = 2;
            		int LA8_0 = input.LA(1);

            		if ( (LA8_0 == 77) )
            		{
            		    alt8 = 1;
            		}
            		switch (alt8) 
            		{
            		    case 1 :
            		        // ObjectiveC2ansi.g:51:4: instance_variables
            		        {

            		        	PushFollow(FOLLOW_instance_variables_in_class_interface219);
            		        	instance_variables40 = instance_variables();
            		        	state.followingStackPointer--;
            		        	if (state.failed) return retval;
            		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, instance_variables40.Tree);

            		        }
            		        break;

            		}

            		// ObjectiveC2ansi.g:52:2: ( properties_list )?
            		int alt9 = 2;
            		int LA9_0 = input.LA(1);

            		if ( (LA9_0 == 63) )
            		{
            		    alt9 = 1;
            		}
            		switch (alt9) 
            		{
            		    case 1 :
            		        // ObjectiveC2ansi.g:52:4: properties_list
            		        {

            		        	PushFollow(FOLLOW_properties_list_in_class_interface227);
            		        	properties_list41 = properties_list();
            		        	state.followingStackPointer--;
            		        	if (state.failed) return retval;
            		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, properties_list41.Tree);

            		        }
            		        break;

            		}

            		// ObjectiveC2ansi.g:53:2: ( interface_declaration_list )?
            		int alt10 = 2;
            		int LA10_0 = input.LA(1);

            		if ( (LA10_0 == IDENTIFIER || LA10_0 == 22 || LA10_0 == 83 || LA10_0 == 100 || (LA10_0 >= 102 && LA10_0 <= 103) || (LA10_0 >= 105 && LA10_0 <= 106) || LA10_0 == 111 || (LA10_0 >= 113 && LA10_0 <= 115) || LA10_0 == 118 || (LA10_0 >= 120 && LA10_0 <= 123) || (LA10_0 >= 125 && LA10_0 <= 126) || LA10_0 == 129 || (LA10_0 >= 133 && LA10_0 <= 134) || (LA10_0 >= 136 && LA10_0 <= 137) || (LA10_0 >= 140 && LA10_0 <= 144)) )
            		{
            		    alt10 = 1;
            		}
            		switch (alt10) 
            		{
            		    case 1 :
            		        // ObjectiveC2ansi.g:53:4: interface_declaration_list
            		        {

            		        	PushFollow(FOLLOW_interface_declaration_list_in_class_interface235);
            		        	interface_declaration_list42 = interface_declaration_list();
            		        	state.followingStackPointer--;
            		        	if (state.failed) return retval;
            		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, interface_declaration_list42.Tree);

            		        }
            		        break;

            		}


            	}

            	string_literal43=(IToken)Match(input,57,FOLLOW_57_in_class_interface244); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal43_tree = (object)adaptor.Create(string_literal43);
            		adaptor.AddChild(root_0, string_literal43_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "class_interface"

    public class category_interface_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "category_interface"
    // ObjectiveC2ansi.g:57:0: category_interface : '@interface' ( class_name '(' category_name ')' ( protocol_reference_list )? ( interface_declaration_list )? ) '@end' ;
    public ObjectiveC2ansiParser.category_interface_return category_interface() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.category_interface_return retval = new ObjectiveC2ansiParser.category_interface_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal44 = null;
        IToken char_literal46 = null;
        IToken char_literal48 = null;
        IToken string_literal51 = null;
        ObjectiveC2ansiParser.class_name_return class_name45 = null;

        ObjectiveC2ansiParser.category_name_return category_name47 = null;

        ObjectiveC2ansiParser.protocol_reference_list_return protocol_reference_list49 = null;

        ObjectiveC2ansiParser.interface_declaration_list_return interface_declaration_list50 = null;


        object string_literal44_tree=null;
        object char_literal46_tree=null;
        object char_literal48_tree=null;
        object string_literal51_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:58:2: ( '@interface' ( class_name '(' category_name ')' ( protocol_reference_list )? ( interface_declaration_list )? ) '@end' )
            // ObjectiveC2ansi.g:58:2: '@interface' ( class_name '(' category_name ')' ( protocol_reference_list )? ( interface_declaration_list )? ) '@end'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal44=(IToken)Match(input,60,FOLLOW_60_in_category_interface252); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal44_tree = (object)adaptor.Create(string_literal44);
            		adaptor.AddChild(root_0, string_literal44_tree);
            	}
            	// ObjectiveC2ansi.g:59:2: ( class_name '(' category_name ')' ( protocol_reference_list )? ( interface_declaration_list )? )
            	// ObjectiveC2ansi.g:60:2: class_name '(' category_name ')' ( protocol_reference_list )? ( interface_declaration_list )?
            	{
            		PushFollow(FOLLOW_class_name_in_category_interface258);
            		class_name45 = class_name();
            		state.followingStackPointer--;
            		if (state.failed) return retval;
            		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, class_name45.Tree);
            		char_literal46=(IToken)Match(input,40,FOLLOW_40_in_category_interface260); if (state.failed) return retval;
            		if ( state.backtracking == 0 )
            		{char_literal46_tree = (object)adaptor.Create(char_literal46);
            			adaptor.AddChild(root_0, char_literal46_tree);
            		}
            		PushFollow(FOLLOW_category_name_in_category_interface262);
            		category_name47 = category_name();
            		state.followingStackPointer--;
            		if (state.failed) return retval;
            		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, category_name47.Tree);
            		char_literal48=(IToken)Match(input,41,FOLLOW_41_in_category_interface264); if (state.failed) return retval;
            		if ( state.backtracking == 0 )
            		{char_literal48_tree = (object)adaptor.Create(char_literal48);
            			adaptor.AddChild(root_0, char_literal48_tree);
            		}
            		// ObjectiveC2ansi.g:61:2: ( protocol_reference_list )?
            		int alt11 = 2;
            		int LA11_0 = input.LA(1);

            		if ( (LA11_0 == 86) )
            		{
            		    alt11 = 1;
            		}
            		switch (alt11) 
            		{
            		    case 1 :
            		        // ObjectiveC2ansi.g:61:4: protocol_reference_list
            		        {

            		        	PushFollow(FOLLOW_protocol_reference_list_in_category_interface269);
            		        	protocol_reference_list49 = protocol_reference_list();
            		        	state.followingStackPointer--;
            		        	if (state.failed) return retval;
            		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, protocol_reference_list49.Tree);

            		        }
            		        break;

            		}

            		// ObjectiveC2ansi.g:62:2: ( interface_declaration_list )?
            		int alt12 = 2;
            		int LA12_0 = input.LA(1);

            		if ( (LA12_0 == IDENTIFIER || LA12_0 == 22 || LA12_0 == 83 || LA12_0 == 100 || (LA12_0 >= 102 && LA12_0 <= 103) || (LA12_0 >= 105 && LA12_0 <= 106) || LA12_0 == 111 || (LA12_0 >= 113 && LA12_0 <= 115) || LA12_0 == 118 || (LA12_0 >= 120 && LA12_0 <= 123) || (LA12_0 >= 125 && LA12_0 <= 126) || LA12_0 == 129 || (LA12_0 >= 133 && LA12_0 <= 134) || (LA12_0 >= 136 && LA12_0 <= 137) || (LA12_0 >= 140 && LA12_0 <= 144)) )
            		{
            		    alt12 = 1;
            		}
            		switch (alt12) 
            		{
            		    case 1 :
            		        // ObjectiveC2ansi.g:62:4: interface_declaration_list
            		        {

            		        	PushFollow(FOLLOW_interface_declaration_list_in_category_interface277);
            		        	interface_declaration_list50 = interface_declaration_list();
            		        	state.followingStackPointer--;
            		        	if (state.failed) return retval;
            		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, interface_declaration_list50.Tree);

            		        }
            		        break;

            		}


            	}

            	string_literal51=(IToken)Match(input,57,FOLLOW_57_in_category_interface286); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal51_tree = (object)adaptor.Create(string_literal51);
            		adaptor.AddChild(root_0, string_literal51_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "category_interface"

    public class class_implementation_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "class_implementation"
    // ObjectiveC2ansi.g:66:0: class_implementation : '@implementation' ( class_name ( ':' superclass_name )? ( implementation_definition_list )? ) '@end' ;
    public ObjectiveC2ansiParser.class_implementation_return class_implementation() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.class_implementation_return retval = new ObjectiveC2ansiParser.class_implementation_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal52 = null;
        IToken char_literal54 = null;
        IToken string_literal57 = null;
        ObjectiveC2ansiParser.class_name_return class_name53 = null;

        ObjectiveC2ansiParser.superclass_name_return superclass_name55 = null;

        ObjectiveC2ansiParser.implementation_definition_list_return implementation_definition_list56 = null;


        object string_literal52_tree=null;
        object char_literal54_tree=null;
        object string_literal57_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:67:2: ( '@implementation' ( class_name ( ':' superclass_name )? ( implementation_definition_list )? ) '@end' )
            // ObjectiveC2ansi.g:67:2: '@implementation' ( class_name ( ':' superclass_name )? ( implementation_definition_list )? ) '@end'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal52=(IToken)Match(input,59,FOLLOW_59_in_class_implementation294); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal52_tree = (object)adaptor.Create(string_literal52);
            		adaptor.AddChild(root_0, string_literal52_tree);
            	}
            	// ObjectiveC2ansi.g:68:2: ( class_name ( ':' superclass_name )? ( implementation_definition_list )? )
            	// ObjectiveC2ansi.g:69:2: class_name ( ':' superclass_name )? ( implementation_definition_list )?
            	{
            		PushFollow(FOLLOW_class_name_in_class_implementation300);
            		class_name53 = class_name();
            		state.followingStackPointer--;
            		if (state.failed) return retval;
            		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, class_name53.Tree);
            		// ObjectiveC2ansi.g:69:13: ( ':' superclass_name )?
            		int alt13 = 2;
            		int LA13_0 = input.LA(1);

            		if ( (LA13_0 == 50) )
            		{
            		    alt13 = 1;
            		}
            		switch (alt13) 
            		{
            		    case 1 :
            		        // ObjectiveC2ansi.g:69:15: ':' superclass_name
            		        {

            		        	char_literal54=(IToken)Match(input,50,FOLLOW_50_in_class_implementation304); if (state.failed) return retval;
            		        	if ( state.backtracking == 0 )
            		        	{char_literal54_tree = (object)adaptor.Create(char_literal54);
            		        		adaptor.AddChild(root_0, char_literal54_tree);
            		        	}
            		        	PushFollow(FOLLOW_superclass_name_in_class_implementation306);
            		        	superclass_name55 = superclass_name();
            		        	state.followingStackPointer--;
            		        	if (state.failed) return retval;
            		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, superclass_name55.Tree);

            		        }
            		        break;

            		}

            		// ObjectiveC2ansi.g:70:2: ( implementation_definition_list )?
            		int alt14 = 2;
            		int LA14_0 = input.LA(1);

            		if ( (LA14_0 == IDENTIFIER || LA14_0 == 22 || LA14_0 == 55 || LA14_0 == 69 || LA14_0 == 83 || LA14_0 == 100 || (LA14_0 >= 102 && LA14_0 <= 103) || (LA14_0 >= 105 && LA14_0 <= 106) || LA14_0 == 111 || (LA14_0 >= 113 && LA14_0 <= 115) || LA14_0 == 118 || (LA14_0 >= 120 && LA14_0 <= 123) || (LA14_0 >= 125 && LA14_0 <= 126) || LA14_0 == 129 || (LA14_0 >= 133 && LA14_0 <= 134) || (LA14_0 >= 136 && LA14_0 <= 137) || (LA14_0 >= 140 && LA14_0 <= 144)) )
            		{
            		    alt14 = 1;
            		}
            		else if ( (LA14_0 == 57) )
            		{
            		    int LA14_2 = input.LA(2);

            		    if ( (synpred34_ObjectiveC2ansi()) )
            		    {
            		        alt14 = 1;
            		    }
            		}
            		switch (alt14) 
            		{
            		    case 1 :
            		        // ObjectiveC2ansi.g:70:4: implementation_definition_list
            		        {

            		        	PushFollow(FOLLOW_implementation_definition_list_in_class_implementation314);
            		        	implementation_definition_list56 = implementation_definition_list();
            		        	state.followingStackPointer--;
            		        	if (state.failed) return retval;
            		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, implementation_definition_list56.Tree);

            		        }
            		        break;

            		}


            	}

            	string_literal57=(IToken)Match(input,57,FOLLOW_57_in_class_implementation323); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal57_tree = (object)adaptor.Create(string_literal57);
            		adaptor.AddChild(root_0, string_literal57_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "class_implementation"

    public class category_implementation_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "category_implementation"
    // ObjectiveC2ansi.g:74:0: category_implementation : '@implementation' ( class_name '(' category_name ')' ( implementation_definition_list )? ) '@end' ;
    public ObjectiveC2ansiParser.category_implementation_return category_implementation() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.category_implementation_return retval = new ObjectiveC2ansiParser.category_implementation_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal58 = null;
        IToken char_literal60 = null;
        IToken char_literal62 = null;
        IToken string_literal64 = null;
        ObjectiveC2ansiParser.class_name_return class_name59 = null;

        ObjectiveC2ansiParser.category_name_return category_name61 = null;

        ObjectiveC2ansiParser.implementation_definition_list_return implementation_definition_list63 = null;


        object string_literal58_tree=null;
        object char_literal60_tree=null;
        object char_literal62_tree=null;
        object string_literal64_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:75:2: ( '@implementation' ( class_name '(' category_name ')' ( implementation_definition_list )? ) '@end' )
            // ObjectiveC2ansi.g:75:2: '@implementation' ( class_name '(' category_name ')' ( implementation_definition_list )? ) '@end'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal58=(IToken)Match(input,59,FOLLOW_59_in_category_implementation331); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal58_tree = (object)adaptor.Create(string_literal58);
            		adaptor.AddChild(root_0, string_literal58_tree);
            	}
            	// ObjectiveC2ansi.g:75:19: ( class_name '(' category_name ')' ( implementation_definition_list )? )
            	// ObjectiveC2ansi.g:76:2: class_name '(' category_name ')' ( implementation_definition_list )?
            	{
            		PushFollow(FOLLOW_class_name_in_category_implementation335);
            		class_name59 = class_name();
            		state.followingStackPointer--;
            		if (state.failed) return retval;
            		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, class_name59.Tree);
            		char_literal60=(IToken)Match(input,40,FOLLOW_40_in_category_implementation337); if (state.failed) return retval;
            		if ( state.backtracking == 0 )
            		{char_literal60_tree = (object)adaptor.Create(char_literal60);
            			adaptor.AddChild(root_0, char_literal60_tree);
            		}
            		PushFollow(FOLLOW_category_name_in_category_implementation339);
            		category_name61 = category_name();
            		state.followingStackPointer--;
            		if (state.failed) return retval;
            		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, category_name61.Tree);
            		char_literal62=(IToken)Match(input,41,FOLLOW_41_in_category_implementation341); if (state.failed) return retval;
            		if ( state.backtracking == 0 )
            		{char_literal62_tree = (object)adaptor.Create(char_literal62);
            			adaptor.AddChild(root_0, char_literal62_tree);
            		}
            		// ObjectiveC2ansi.g:77:2: ( implementation_definition_list )?
            		int alt15 = 2;
            		int LA15_0 = input.LA(1);

            		if ( (LA15_0 == IDENTIFIER || LA15_0 == 22 || LA15_0 == 55 || LA15_0 == 69 || LA15_0 == 83 || LA15_0 == 100 || (LA15_0 >= 102 && LA15_0 <= 103) || (LA15_0 >= 105 && LA15_0 <= 106) || LA15_0 == 111 || (LA15_0 >= 113 && LA15_0 <= 115) || LA15_0 == 118 || (LA15_0 >= 120 && LA15_0 <= 123) || (LA15_0 >= 125 && LA15_0 <= 126) || LA15_0 == 129 || (LA15_0 >= 133 && LA15_0 <= 134) || (LA15_0 >= 136 && LA15_0 <= 137) || (LA15_0 >= 140 && LA15_0 <= 144)) )
            		{
            		    alt15 = 1;
            		}
            		else if ( (LA15_0 == 57) )
            		{
            		    int LA15_2 = input.LA(2);

            		    if ( (synpred35_ObjectiveC2ansi()) )
            		    {
            		        alt15 = 1;
            		    }
            		}
            		switch (alt15) 
            		{
            		    case 1 :
            		        // ObjectiveC2ansi.g:77:4: implementation_definition_list
            		        {

            		        	PushFollow(FOLLOW_implementation_definition_list_in_category_implementation346);
            		        	implementation_definition_list63 = implementation_definition_list();
            		        	state.followingStackPointer--;
            		        	if (state.failed) return retval;
            		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, implementation_definition_list63.Tree);

            		        }
            		        break;

            		}


            	}

            	string_literal64=(IToken)Match(input,57,FOLLOW_57_in_category_implementation353); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal64_tree = (object)adaptor.Create(string_literal64);
            		adaptor.AddChild(root_0, string_literal64_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "category_implementation"

    public class protocol_declaration_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "protocol_declaration"
    // ObjectiveC2ansi.g:80:0: protocol_declaration : '@protocol' ( protocol_name ( protocol_reference_list )? ( interface_declaration_list )? ) '@end' ;
    public ObjectiveC2ansiParser.protocol_declaration_return protocol_declaration() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.protocol_declaration_return retval = new ObjectiveC2ansiParser.protocol_declaration_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal65 = null;
        IToken string_literal69 = null;
        ObjectiveC2ansiParser.protocol_name_return protocol_name66 = null;

        ObjectiveC2ansiParser.protocol_reference_list_return protocol_reference_list67 = null;

        ObjectiveC2ansiParser.interface_declaration_list_return interface_declaration_list68 = null;


        object string_literal65_tree=null;
        object string_literal69_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:81:2: ( '@protocol' ( protocol_name ( protocol_reference_list )? ( interface_declaration_list )? ) '@end' )
            // ObjectiveC2ansi.g:81:2: '@protocol' ( protocol_name ( protocol_reference_list )? ( interface_declaration_list )? ) '@end'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal65=(IToken)Match(input,65,FOLLOW_65_in_protocol_declaration361); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal65_tree = (object)adaptor.Create(string_literal65);
            		adaptor.AddChild(root_0, string_literal65_tree);
            	}
            	// ObjectiveC2ansi.g:81:13: ( protocol_name ( protocol_reference_list )? ( interface_declaration_list )? )
            	// ObjectiveC2ansi.g:82:2: protocol_name ( protocol_reference_list )? ( interface_declaration_list )?
            	{
            		PushFollow(FOLLOW_protocol_name_in_protocol_declaration365);
            		protocol_name66 = protocol_name();
            		state.followingStackPointer--;
            		if (state.failed) return retval;
            		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, protocol_name66.Tree);
            		// ObjectiveC2ansi.g:82:16: ( protocol_reference_list )?
            		int alt16 = 2;
            		int LA16_0 = input.LA(1);

            		if ( (LA16_0 == 86) )
            		{
            		    alt16 = 1;
            		}
            		switch (alt16) 
            		{
            		    case 1 :
            		        // ObjectiveC2ansi.g:82:18: protocol_reference_list
            		        {

            		        	PushFollow(FOLLOW_protocol_reference_list_in_protocol_declaration369);
            		        	protocol_reference_list67 = protocol_reference_list();
            		        	state.followingStackPointer--;
            		        	if (state.failed) return retval;
            		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, protocol_reference_list67.Tree);

            		        }
            		        break;

            		}

            		// ObjectiveC2ansi.g:83:2: ( interface_declaration_list )?
            		int alt17 = 2;
            		int LA17_0 = input.LA(1);

            		if ( (LA17_0 == IDENTIFIER || LA17_0 == 22 || LA17_0 == 83 || LA17_0 == 100 || (LA17_0 >= 102 && LA17_0 <= 103) || (LA17_0 >= 105 && LA17_0 <= 106) || LA17_0 == 111 || (LA17_0 >= 113 && LA17_0 <= 115) || LA17_0 == 118 || (LA17_0 >= 120 && LA17_0 <= 123) || (LA17_0 >= 125 && LA17_0 <= 126) || LA17_0 == 129 || (LA17_0 >= 133 && LA17_0 <= 134) || (LA17_0 >= 136 && LA17_0 <= 137) || (LA17_0 >= 140 && LA17_0 <= 144)) )
            		{
            		    alt17 = 1;
            		}
            		switch (alt17) 
            		{
            		    case 1 :
            		        // ObjectiveC2ansi.g:83:4: interface_declaration_list
            		        {

            		        	PushFollow(FOLLOW_interface_declaration_list_in_protocol_declaration377);
            		        	interface_declaration_list68 = interface_declaration_list();
            		        	state.followingStackPointer--;
            		        	if (state.failed) return retval;
            		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, interface_declaration_list68.Tree);

            		        }
            		        break;

            		}


            	}

            	string_literal69=(IToken)Match(input,57,FOLLOW_57_in_protocol_declaration384); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal69_tree = (object)adaptor.Create(string_literal69);
            		adaptor.AddChild(root_0, string_literal69_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "protocol_declaration"

    public class protocol_declaration_list_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "protocol_declaration_list"
    // ObjectiveC2ansi.g:86:0: protocol_declaration_list : ( '@protocol' protocol_list ';' ) ;
    public ObjectiveC2ansiParser.protocol_declaration_list_return protocol_declaration_list() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.protocol_declaration_list_return retval = new ObjectiveC2ansiParser.protocol_declaration_list_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal70 = null;
        IToken char_literal72 = null;
        ObjectiveC2ansiParser.protocol_list_return protocol_list71 = null;


        object string_literal70_tree=null;
        object char_literal72_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:87:2: ( ( '@protocol' protocol_list ';' ) )
            // ObjectiveC2ansi.g:87:2: ( '@protocol' protocol_list ';' )
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:87:2: ( '@protocol' protocol_list ';' )
            	// ObjectiveC2ansi.g:87:3: '@protocol' protocol_list ';'
            	{
            		string_literal70=(IToken)Match(input,65,FOLLOW_65_in_protocol_declaration_list393); if (state.failed) return retval;
            		if ( state.backtracking == 0 )
            		{string_literal70_tree = (object)adaptor.Create(string_literal70);
            			adaptor.AddChild(root_0, string_literal70_tree);
            		}
            		PushFollow(FOLLOW_protocol_list_in_protocol_declaration_list395);
            		protocol_list71 = protocol_list();
            		state.followingStackPointer--;
            		if (state.failed) return retval;
            		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, protocol_list71.Tree);
            		char_literal72=(IToken)Match(input,51,FOLLOW_51_in_protocol_declaration_list396); if (state.failed) return retval;
            		if ( state.backtracking == 0 )
            		{char_literal72_tree = (object)adaptor.Create(char_literal72);
            			adaptor.AddChild(root_0, char_literal72_tree);
            		}

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "protocol_declaration_list"

    public class class_declaration_list_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "class_declaration_list"
    // ObjectiveC2ansi.g:90:0: class_declaration_list : ( '@class' class_list ';' ) ;
    public ObjectiveC2ansiParser.class_declaration_list_return class_declaration_list() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.class_declaration_list_return retval = new ObjectiveC2ansiParser.class_declaration_list_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal73 = null;
        IToken char_literal75 = null;
        ObjectiveC2ansiParser.class_list_return class_list74 = null;


        object string_literal73_tree=null;
        object char_literal75_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:91:2: ( ( '@class' class_list ';' ) )
            // ObjectiveC2ansi.g:91:2: ( '@class' class_list ';' )
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:91:2: ( '@class' class_list ';' )
            	// ObjectiveC2ansi.g:91:3: '@class' class_list ';'
            	{
            		string_literal73=(IToken)Match(input,54,FOLLOW_54_in_class_declaration_list408); if (state.failed) return retval;
            		if ( state.backtracking == 0 )
            		{string_literal73_tree = (object)adaptor.Create(string_literal73);
            			adaptor.AddChild(root_0, string_literal73_tree);
            		}
            		PushFollow(FOLLOW_class_list_in_class_declaration_list410);
            		class_list74 = class_list();
            		state.followingStackPointer--;
            		if (state.failed) return retval;
            		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, class_list74.Tree);
            		char_literal75=(IToken)Match(input,51,FOLLOW_51_in_class_declaration_list411); if (state.failed) return retval;
            		if ( state.backtracking == 0 )
            		{char_literal75_tree = (object)adaptor.Create(char_literal75);
            			adaptor.AddChild(root_0, char_literal75_tree);
            		}

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "class_declaration_list"

    public class class_list_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "class_list"
    // ObjectiveC2ansi.g:94:0: class_list : class_name ( ',' class_name )* ;
    public ObjectiveC2ansiParser.class_list_return class_list() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.class_list_return retval = new ObjectiveC2ansiParser.class_list_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal77 = null;
        ObjectiveC2ansiParser.class_name_return class_name76 = null;

        ObjectiveC2ansiParser.class_name_return class_name78 = null;


        object char_literal77_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:95:2: ( class_name ( ',' class_name )* )
            // ObjectiveC2ansi.g:95:2: class_name ( ',' class_name )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_class_name_in_class_list422);
            	class_name76 = class_name();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, class_name76.Tree);
            	// ObjectiveC2ansi.g:95:13: ( ',' class_name )*
            	do 
            	{
            	    int alt18 = 2;
            	    int LA18_0 = input.LA(1);

            	    if ( (LA18_0 == 44) )
            	    {
            	        alt18 = 1;
            	    }


            	    switch (alt18) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:95:14: ',' class_name
            			    {

            			    	char_literal77=(IToken)Match(input,44,FOLLOW_44_in_class_list425); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal77_tree = (object)adaptor.Create(char_literal77);
            			    		adaptor.AddChild(root_0, char_literal77_tree);
            			    	}
            			    	PushFollow(FOLLOW_class_name_in_class_list427);
            			    	class_name78 = class_name();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, class_name78.Tree);

            			    }
            			    break;

            			default:
            			    goto loop18;
            	    }
            	} while (true);

            	loop18:
            		;	// Stops C# compiler whining that label 'loop18' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "class_list"

    public class protocol_reference_list_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "protocol_reference_list"
    // ObjectiveC2ansi.g:97:0: protocol_reference_list : ( '<' protocol_list '>' ) ;
    public ObjectiveC2ansiParser.protocol_reference_list_return protocol_reference_list() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.protocol_reference_list_return retval = new ObjectiveC2ansiParser.protocol_reference_list_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal79 = null;
        IToken char_literal81 = null;
        ObjectiveC2ansiParser.protocol_list_return protocol_list80 = null;


        object char_literal79_tree=null;
        object char_literal81_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:98:2: ( ( '<' protocol_list '>' ) )
            // ObjectiveC2ansi.g:98:2: ( '<' protocol_list '>' )
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:98:2: ( '<' protocol_list '>' )
            	// ObjectiveC2ansi.g:98:3: '<' protocol_list '>'
            	{
            		char_literal79=(IToken)Match(input,86,FOLLOW_86_in_protocol_reference_list438); if (state.failed) return retval;
            		if ( state.backtracking == 0 )
            		{char_literal79_tree = (object)adaptor.Create(char_literal79);
            			adaptor.AddChild(root_0, char_literal79_tree);
            		}
            		PushFollow(FOLLOW_protocol_list_in_protocol_reference_list440);
            		protocol_list80 = protocol_list();
            		state.followingStackPointer--;
            		if (state.failed) return retval;
            		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, protocol_list80.Tree);
            		char_literal81=(IToken)Match(input,93,FOLLOW_93_in_protocol_reference_list442); if (state.failed) return retval;
            		if ( state.backtracking == 0 )
            		{char_literal81_tree = (object)adaptor.Create(char_literal81);
            			adaptor.AddChild(root_0, char_literal81_tree);
            		}

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "protocol_reference_list"

    public class protocol_list_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "protocol_list"
    // ObjectiveC2ansi.g:100:0: protocol_list : protocol_name ( ',' protocol_name )* ;
    public ObjectiveC2ansiParser.protocol_list_return protocol_list() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.protocol_list_return retval = new ObjectiveC2ansiParser.protocol_list_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal83 = null;
        ObjectiveC2ansiParser.protocol_name_return protocol_name82 = null;

        ObjectiveC2ansiParser.protocol_name_return protocol_name84 = null;


        object char_literal83_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:101:2: ( protocol_name ( ',' protocol_name )* )
            // ObjectiveC2ansi.g:101:2: protocol_name ( ',' protocol_name )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_protocol_name_in_protocol_list451);
            	protocol_name82 = protocol_name();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, protocol_name82.Tree);
            	// ObjectiveC2ansi.g:101:16: ( ',' protocol_name )*
            	do 
            	{
            	    int alt19 = 2;
            	    int LA19_0 = input.LA(1);

            	    if ( (LA19_0 == 44) )
            	    {
            	        alt19 = 1;
            	    }


            	    switch (alt19) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:101:17: ',' protocol_name
            			    {

            			    	char_literal83=(IToken)Match(input,44,FOLLOW_44_in_protocol_list454); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal83_tree = (object)adaptor.Create(char_literal83);
            			    		adaptor.AddChild(root_0, char_literal83_tree);
            			    	}
            			    	PushFollow(FOLLOW_protocol_name_in_protocol_list456);
            			    	protocol_name84 = protocol_name();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, protocol_name84.Tree);

            			    }
            			    break;

            			default:
            			    goto loop19;
            	    }
            	} while (true);

            	loop19:
            		;	// Stops C# compiler whining that label 'loop19' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "protocol_list"

    public class class_name_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "class_name"
    // ObjectiveC2ansi.g:103:0: class_name : IDENTIFIER ;
    public ObjectiveC2ansiParser.class_name_return class_name() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.class_name_return retval = new ObjectiveC2ansiParser.class_name_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken IDENTIFIER85 = null;

        object IDENTIFIER85_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:104:2: ( IDENTIFIER )
            // ObjectiveC2ansi.g:104:2: IDENTIFIER
            {
            	root_0 = (object)adaptor.GetNilNode();

            	IDENTIFIER85=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_class_name466); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{IDENTIFIER85_tree = (object)adaptor.Create(IDENTIFIER85);
            		adaptor.AddChild(root_0, IDENTIFIER85_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "class_name"

    public class superclass_name_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "superclass_name"
    // ObjectiveC2ansi.g:106:0: superclass_name : IDENTIFIER ;
    public ObjectiveC2ansiParser.superclass_name_return superclass_name() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.superclass_name_return retval = new ObjectiveC2ansiParser.superclass_name_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken IDENTIFIER86 = null;

        object IDENTIFIER86_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:107:2: ( IDENTIFIER )
            // ObjectiveC2ansi.g:107:2: IDENTIFIER
            {
            	root_0 = (object)adaptor.GetNilNode();

            	IDENTIFIER86=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_superclass_name474); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{IDENTIFIER86_tree = (object)adaptor.Create(IDENTIFIER86);
            		adaptor.AddChild(root_0, IDENTIFIER86_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "superclass_name"

    public class category_name_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "category_name"
    // ObjectiveC2ansi.g:109:0: category_name : IDENTIFIER ;
    public ObjectiveC2ansiParser.category_name_return category_name() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.category_name_return retval = new ObjectiveC2ansiParser.category_name_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken IDENTIFIER87 = null;

        object IDENTIFIER87_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:110:2: ( IDENTIFIER )
            // ObjectiveC2ansi.g:110:2: IDENTIFIER
            {
            	root_0 = (object)adaptor.GetNilNode();

            	IDENTIFIER87=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_category_name482); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{IDENTIFIER87_tree = (object)adaptor.Create(IDENTIFIER87);
            		adaptor.AddChild(root_0, IDENTIFIER87_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "category_name"

    public class protocol_name_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "protocol_name"
    // ObjectiveC2ansi.g:112:0: protocol_name : IDENTIFIER ;
    public ObjectiveC2ansiParser.protocol_name_return protocol_name() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.protocol_name_return retval = new ObjectiveC2ansiParser.protocol_name_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken IDENTIFIER88 = null;

        object IDENTIFIER88_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:113:2: ( IDENTIFIER )
            // ObjectiveC2ansi.g:113:2: IDENTIFIER
            {
            	root_0 = (object)adaptor.GetNilNode();

            	IDENTIFIER88=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_protocol_name490); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{IDENTIFIER88_tree = (object)adaptor.Create(IDENTIFIER88);
            		adaptor.AddChild(root_0, IDENTIFIER88_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "protocol_name"

    public class instance_variables_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "instance_variables"
    // ObjectiveC2ansi.g:115:0: instance_variables : '{' ( ( visibility_specification )? struct_declaration_list )* '}' ;
    public ObjectiveC2ansiParser.instance_variables_return instance_variables() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.instance_variables_return retval = new ObjectiveC2ansiParser.instance_variables_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal89 = null;
        IToken char_literal92 = null;
        ObjectiveC2ansiParser.visibility_specification_return visibility_specification90 = null;

        ObjectiveC2ansiParser.struct_declaration_list_return struct_declaration_list91 = null;


        object char_literal89_tree=null;
        object char_literal92_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:116:2: ( '{' ( ( visibility_specification )? struct_declaration_list )* '}' )
            // ObjectiveC2ansi.g:116:2: '{' ( ( visibility_specification )? struct_declaration_list )* '}'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	char_literal89=(IToken)Match(input,77,FOLLOW_77_in_instance_variables498); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal89_tree = (object)adaptor.Create(char_literal89);
            		adaptor.AddChild(root_0, char_literal89_tree);
            	}
            	// ObjectiveC2ansi.g:116:6: ( ( visibility_specification )? struct_declaration_list )*
            	do 
            	{
            	    int alt21 = 2;
            	    int LA21_0 = input.LA(1);

            	    if ( (LA21_0 == IDENTIFIER || (LA21_0 >= 61 && LA21_0 <= 62) || LA21_0 == 64 || LA21_0 == 66 || (LA21_0 >= 102 && LA21_0 <= 103) || (LA21_0 >= 105 && LA21_0 <= 106) || LA21_0 == 111 || LA21_0 == 113 || LA21_0 == 115 || LA21_0 == 118 || (LA21_0 >= 120 && LA21_0 <= 123) || (LA21_0 >= 125 && LA21_0 <= 126) || (LA21_0 >= 133 && LA21_0 <= 134) || LA21_0 == 137 || (LA21_0 >= 141 && LA21_0 <= 144)) )
            	    {
            	        alt21 = 1;
            	    }


            	    switch (alt21) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:116:7: ( visibility_specification )? struct_declaration_list
            			    {

            			    	// ObjectiveC2ansi.g:116:7: ( visibility_specification )?
            			    	int alt20 = 2;
            			    	int LA20_0 = input.LA(1);

            			    	if ( ((LA20_0 >= 61 && LA20_0 <= 62) || LA20_0 == 64 || LA20_0 == 66) )
            			    	{
            			    	    alt20 = 1;
            			    	}
            			    	switch (alt20) 
            			    	{
            			    	    case 1 :
            			    	        // ObjectiveC2ansi.g:116:8: visibility_specification
            			    	        {

            			    	        	PushFollow(FOLLOW_visibility_specification_in_instance_variables502);
            			    	        	visibility_specification90 = visibility_specification();
            			    	        	state.followingStackPointer--;
            			    	        	if (state.failed) return retval;
            			    	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, visibility_specification90.Tree);

            			    	        }
            			    	        break;

            			    	}

            			    	PushFollow(FOLLOW_struct_declaration_list_in_instance_variables506);
            			    	struct_declaration_list91 = struct_declaration_list();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, struct_declaration_list91.Tree);

            			    }
            			    break;

            			default:
            			    goto loop21;
            	    }
            	} while (true);

            	loop21:
            		;	// Stops C# compiler whining that label 'loop21' has no statements

            	char_literal92=(IToken)Match(input,81,FOLLOW_81_in_instance_variables510); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal92_tree = (object)adaptor.Create(char_literal92);
            		adaptor.AddChild(root_0, char_literal92_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "instance_variables"

    public class properties_list_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "properties_list"
    // ObjectiveC2ansi.g:118:0: properties_list : property ( properties_list )? ;
    public ObjectiveC2ansiParser.properties_list_return properties_list() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.properties_list_return retval = new ObjectiveC2ansiParser.properties_list_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        ObjectiveC2ansiParser.property_return property93 = null;

        ObjectiveC2ansiParser.properties_list_return properties_list94 = null;



        try 
    	{
            // ObjectiveC2ansi.g:119:4: ( property ( properties_list )? )
            // ObjectiveC2ansi.g:119:4: property ( properties_list )?
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_property_in_properties_list519);
            	property93 = property();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, property93.Tree);
            	// ObjectiveC2ansi.g:119:13: ( properties_list )?
            	int alt22 = 2;
            	int LA22_0 = input.LA(1);

            	if ( (LA22_0 == 63) )
            	{
            	    alt22 = 1;
            	}
            	switch (alt22) 
            	{
            	    case 1 :
            	        // ObjectiveC2ansi.g:0:0: properties_list
            	        {

            	        	PushFollow(FOLLOW_properties_list_in_properties_list521);
            	        	properties_list94 = properties_list();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, properties_list94.Tree);

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "properties_list"

    public class struct_declaration_list_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "struct_declaration_list"
    // ObjectiveC2ansi.g:121:0: struct_declaration_list : ( struct_declaration ) ( struct_declaration )* ;
    public ObjectiveC2ansiParser.struct_declaration_list_return struct_declaration_list() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.struct_declaration_list_return retval = new ObjectiveC2ansiParser.struct_declaration_list_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        ObjectiveC2ansiParser.struct_declaration_return struct_declaration95 = null;

        ObjectiveC2ansiParser.struct_declaration_return struct_declaration96 = null;



        try 
    	{
            // ObjectiveC2ansi.g:122:11: ( ( struct_declaration ) ( struct_declaration )* )
            // ObjectiveC2ansi.g:122:11: ( struct_declaration ) ( struct_declaration )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:122:11: ( struct_declaration )
            	// ObjectiveC2ansi.g:122:12: struct_declaration
            	{
            		PushFollow(FOLLOW_struct_declaration_in_struct_declaration_list540);
            		struct_declaration95 = struct_declaration();
            		state.followingStackPointer--;
            		if (state.failed) return retval;
            		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, struct_declaration95.Tree);

            	}

            	// ObjectiveC2ansi.g:122:32: ( struct_declaration )*
            	do 
            	{
            	    int alt23 = 2;
            	    alt23 = dfa23.Predict(input);
            	    switch (alt23) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:122:33: struct_declaration
            			    {

            			    	PushFollow(FOLLOW_struct_declaration_in_struct_declaration_list544);
            			    	struct_declaration96 = struct_declaration();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, struct_declaration96.Tree);

            			    }
            			    break;

            			default:
            			    goto loop23;
            	    }
            	} while (true);

            	loop23:
            		;	// Stops C# compiler whining that label 'loop23' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "struct_declaration_list"

    public class visibility_specification_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "visibility_specification"
    // ObjectiveC2ansi.g:126:0: visibility_specification : ( '@private' | '@protected' | '@package' | '@public' );
    public ObjectiveC2ansiParser.visibility_specification_return visibility_specification() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.visibility_specification_return retval = new ObjectiveC2ansiParser.visibility_specification_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken set97 = null;

        object set97_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:127:2: ( '@private' | '@protected' | '@package' | '@public' )
            // ObjectiveC2ansi.g:
            {
            	root_0 = (object)adaptor.GetNilNode();

            	set97 = (IToken)input.LT(1);
            	if ( (input.LA(1) >= 61 && input.LA(1) <= 62) || input.LA(1) == 64 || input.LA(1) == 66 ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set97));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "visibility_specification"

    public class interface_declaration_list_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "interface_declaration_list"
    // ObjectiveC2ansi.g:132:0: interface_declaration_list : ( declaration | class_method_declaration | instance_method_declaration )+ ;
    public ObjectiveC2ansiParser.interface_declaration_list_return interface_declaration_list() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.interface_declaration_list_return retval = new ObjectiveC2ansiParser.interface_declaration_list_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        ObjectiveC2ansiParser.declaration_return declaration98 = null;

        ObjectiveC2ansiParser.class_method_declaration_return class_method_declaration99 = null;

        ObjectiveC2ansiParser.instance_method_declaration_return instance_method_declaration100 = null;



        try 
    	{
            // ObjectiveC2ansi.g:133:2: ( ( declaration | class_method_declaration | instance_method_declaration )+ )
            // ObjectiveC2ansi.g:133:2: ( declaration | class_method_declaration | instance_method_declaration )+
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:133:2: ( declaration | class_method_declaration | instance_method_declaration )+
            	int cnt24 = 0;
            	do 
            	{
            	    int alt24 = 4;
            	    switch ( input.LA(1) ) 
            	    {
            	    case IDENTIFIER:
            	    case 100:
            	    case 102:
            	    case 103:
            	    case 105:
            	    case 106:
            	    case 111:
            	    case 113:
            	    case 114:
            	    case 115:
            	    case 118:
            	    case 120:
            	    case 121:
            	    case 122:
            	    case 123:
            	    case 125:
            	    case 126:
            	    case 129:
            	    case 133:
            	    case 134:
            	    case 136:
            	    case 137:
            	    case 140:
            	    case 141:
            	    case 142:
            	    case 143:
            	    case 144:
            	    	{
            	        alt24 = 1;
            	        }
            	        break;
            	    case 83:
            	    	{
            	        alt24 = 2;
            	        }
            	        break;
            	    case 22:
            	    	{
            	        alt24 = 3;
            	        }
            	        break;

            	    }

            	    switch (alt24) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:133:3: declaration
            			    {

            			    	PushFollow(FOLLOW_declaration_in_interface_declaration_list589);
            			    	declaration98 = declaration();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, declaration98.Tree);

            			    }
            			    break;
            			case 2 :
            			    // ObjectiveC2ansi.g:133:17: class_method_declaration
            			    {

            			    	PushFollow(FOLLOW_class_method_declaration_in_interface_declaration_list593);
            			    	class_method_declaration99 = class_method_declaration();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, class_method_declaration99.Tree);

            			    }
            			    break;
            			case 3 :
            			    // ObjectiveC2ansi.g:133:44: instance_method_declaration
            			    {

            			    	PushFollow(FOLLOW_instance_method_declaration_in_interface_declaration_list597);
            			    	instance_method_declaration100 = instance_method_declaration();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, instance_method_declaration100.Tree);

            			    }
            			    break;

            			default:
            			    if ( cnt24 >= 1 ) goto loop24;
            			    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            		            EarlyExitException eee24 =
            		                new EarlyExitException(24, input);
            		            throw eee24;
            	    }
            	    cnt24++;
            	} while (true);

            	loop24:
            		;	// Stops C# compiler whining that label 'loop24' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "interface_declaration_list"

    public class class_method_declaration_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "class_method_declaration"
    // ObjectiveC2ansi.g:136:0: class_method_declaration : ( '+' method_declaration ) ;
    public ObjectiveC2ansiParser.class_method_declaration_return class_method_declaration() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.class_method_declaration_return retval = new ObjectiveC2ansiParser.class_method_declaration_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal101 = null;
        ObjectiveC2ansiParser.method_declaration_return method_declaration102 = null;


        object char_literal101_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:137:2: ( ( '+' method_declaration ) )
            // ObjectiveC2ansi.g:137:2: ( '+' method_declaration )
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:137:2: ( '+' method_declaration )
            	// ObjectiveC2ansi.g:137:3: '+' method_declaration
            	{
            		char_literal101=(IToken)Match(input,83,FOLLOW_83_in_class_method_declaration610); if (state.failed) return retval;
            		if ( state.backtracking == 0 )
            		{char_literal101_tree = (object)adaptor.Create(char_literal101);
            			adaptor.AddChild(root_0, char_literal101_tree);
            		}
            		PushFollow(FOLLOW_method_declaration_in_class_method_declaration612);
            		method_declaration102 = method_declaration();
            		state.followingStackPointer--;
            		if (state.failed) return retval;
            		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, method_declaration102.Tree);

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "class_method_declaration"

    public class instance_method_declaration_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "instance_method_declaration"
    // ObjectiveC2ansi.g:140:0: instance_method_declaration : ( '-' method_declaration ) ;
    public ObjectiveC2ansiParser.instance_method_declaration_return instance_method_declaration() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.instance_method_declaration_return retval = new ObjectiveC2ansiParser.instance_method_declaration_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal103 = null;
        ObjectiveC2ansiParser.method_declaration_return method_declaration104 = null;


        object char_literal103_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:141:2: ( ( '-' method_declaration ) )
            // ObjectiveC2ansi.g:141:2: ( '-' method_declaration )
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:141:2: ( '-' method_declaration )
            	// ObjectiveC2ansi.g:141:3: '-' method_declaration
            	{
            		char_literal103=(IToken)Match(input,22,FOLLOW_22_in_instance_method_declaration624); if (state.failed) return retval;
            		if ( state.backtracking == 0 )
            		{char_literal103_tree = (object)adaptor.Create(char_literal103);
            			adaptor.AddChild(root_0, char_literal103_tree);
            		}
            		PushFollow(FOLLOW_method_declaration_in_instance_method_declaration626);
            		method_declaration104 = method_declaration();
            		state.followingStackPointer--;
            		if (state.failed) return retval;
            		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, method_declaration104.Tree);

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "instance_method_declaration"

    public class method_declaration_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "method_declaration"
    // ObjectiveC2ansi.g:144:0: method_declaration : ( method_type )? method_selector ';' ;
    public ObjectiveC2ansiParser.method_declaration_return method_declaration() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.method_declaration_return retval = new ObjectiveC2ansiParser.method_declaration_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal107 = null;
        ObjectiveC2ansiParser.method_type_return method_type105 = null;

        ObjectiveC2ansiParser.method_selector_return method_selector106 = null;


        object char_literal107_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:145:2: ( ( method_type )? method_selector ';' )
            // ObjectiveC2ansi.g:145:2: ( method_type )? method_selector ';'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:145:2: ( method_type )?
            	int alt25 = 2;
            	int LA25_0 = input.LA(1);

            	if ( (LA25_0 == 40) )
            	{
            	    alt25 = 1;
            	}
            	switch (alt25) 
            	{
            	    case 1 :
            	        // ObjectiveC2ansi.g:145:4: method_type
            	        {

            	        	PushFollow(FOLLOW_method_type_in_method_declaration639);
            	        	method_type105 = method_type();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, method_type105.Tree);

            	        }
            	        break;

            	}

            	PushFollow(FOLLOW_method_selector_in_method_declaration644);
            	method_selector106 = method_selector();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, method_selector106.Tree);
            	char_literal107=(IToken)Match(input,51,FOLLOW_51_in_method_declaration646); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal107_tree = (object)adaptor.Create(char_literal107);
            		adaptor.AddChild(root_0, char_literal107_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "method_declaration"

    public class synthesize_statement_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "synthesize_statement"
    // ObjectiveC2ansi.g:147:0: synthesize_statement : '@synthesize' IDENTIFIER ( ',' IDENTIFIER )* ';' ;
    public ObjectiveC2ansiParser.synthesize_statement_return synthesize_statement() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.synthesize_statement_return retval = new ObjectiveC2ansiParser.synthesize_statement_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal108 = null;
        IToken IDENTIFIER109 = null;
        IToken char_literal110 = null;
        IToken IDENTIFIER111 = null;
        IToken char_literal112 = null;

        object string_literal108_tree=null;
        object IDENTIFIER109_tree=null;
        object char_literal110_tree=null;
        object IDENTIFIER111_tree=null;
        object char_literal112_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:148:4: ( '@synthesize' IDENTIFIER ( ',' IDENTIFIER )* ';' )
            // ObjectiveC2ansi.g:148:4: '@synthesize' IDENTIFIER ( ',' IDENTIFIER )* ';'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal108=(IToken)Match(input,69,FOLLOW_69_in_synthesize_statement655); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal108_tree = (object)adaptor.Create(string_literal108);
            		adaptor.AddChild(root_0, string_literal108_tree);
            	}
            	IDENTIFIER109=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_synthesize_statement657); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{IDENTIFIER109_tree = (object)adaptor.Create(IDENTIFIER109);
            		adaptor.AddChild(root_0, IDENTIFIER109_tree);
            	}
            	// ObjectiveC2ansi.g:148:29: ( ',' IDENTIFIER )*
            	do 
            	{
            	    int alt26 = 2;
            	    int LA26_0 = input.LA(1);

            	    if ( (LA26_0 == 44) )
            	    {
            	        alt26 = 1;
            	    }


            	    switch (alt26) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:148:30: ',' IDENTIFIER
            			    {

            			    	char_literal110=(IToken)Match(input,44,FOLLOW_44_in_synthesize_statement660); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal110_tree = (object)adaptor.Create(char_literal110);
            			    		adaptor.AddChild(root_0, char_literal110_tree);
            			    	}
            			    	IDENTIFIER111=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_synthesize_statement662); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{IDENTIFIER111_tree = (object)adaptor.Create(IDENTIFIER111);
            			    		adaptor.AddChild(root_0, IDENTIFIER111_tree);
            			    	}

            			    }
            			    break;

            			default:
            			    goto loop26;
            	    }
            	} while (true);

            	loop26:
            		;	// Stops C# compiler whining that label 'loop26' has no statements

            	char_literal112=(IToken)Match(input,51,FOLLOW_51_in_synthesize_statement666); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal112_tree = (object)adaptor.Create(char_literal112);
            		adaptor.AddChild(root_0, char_literal112_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "synthesize_statement"

    public class dynamic_statement_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "dynamic_statement"
    // ObjectiveC2ansi.g:150:0: dynamic_statement : '@dynamic' IDENTIFIER ( ',' IDENTIFIER )* ';' ;
    public ObjectiveC2ansiParser.dynamic_statement_return dynamic_statement() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.dynamic_statement_return retval = new ObjectiveC2ansiParser.dynamic_statement_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal113 = null;
        IToken IDENTIFIER114 = null;
        IToken char_literal115 = null;
        IToken IDENTIFIER116 = null;
        IToken char_literal117 = null;

        object string_literal113_tree=null;
        object IDENTIFIER114_tree=null;
        object char_literal115_tree=null;
        object IDENTIFIER116_tree=null;
        object char_literal117_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:151:4: ( '@dynamic' IDENTIFIER ( ',' IDENTIFIER )* ';' )
            // ObjectiveC2ansi.g:151:4: '@dynamic' IDENTIFIER ( ',' IDENTIFIER )* ';'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal113=(IToken)Match(input,55,FOLLOW_55_in_dynamic_statement675); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal113_tree = (object)adaptor.Create(string_literal113);
            		adaptor.AddChild(root_0, string_literal113_tree);
            	}
            	IDENTIFIER114=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_dynamic_statement677); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{IDENTIFIER114_tree = (object)adaptor.Create(IDENTIFIER114);
            		adaptor.AddChild(root_0, IDENTIFIER114_tree);
            	}
            	// ObjectiveC2ansi.g:151:26: ( ',' IDENTIFIER )*
            	do 
            	{
            	    int alt27 = 2;
            	    int LA27_0 = input.LA(1);

            	    if ( (LA27_0 == 44) )
            	    {
            	        alt27 = 1;
            	    }


            	    switch (alt27) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:151:27: ',' IDENTIFIER
            			    {

            			    	char_literal115=(IToken)Match(input,44,FOLLOW_44_in_dynamic_statement680); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal115_tree = (object)adaptor.Create(char_literal115);
            			    		adaptor.AddChild(root_0, char_literal115_tree);
            			    	}
            			    	IDENTIFIER116=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_dynamic_statement682); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{IDENTIFIER116_tree = (object)adaptor.Create(IDENTIFIER116);
            			    		adaptor.AddChild(root_0, IDENTIFIER116_tree);
            			    	}

            			    }
            			    break;

            			default:
            			    goto loop27;
            	    }
            	} while (true);

            	loop27:
            		;	// Stops C# compiler whining that label 'loop27' has no statements

            	char_literal117=(IToken)Match(input,51,FOLLOW_51_in_dynamic_statement686); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal117_tree = (object)adaptor.Create(char_literal117);
            		adaptor.AddChild(root_0, char_literal117_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "dynamic_statement"

    public class implementation_definition_list_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "implementation_definition_list"
    // ObjectiveC2ansi.g:153:0: implementation_definition_list : ( synthesize_statement | dynamic_statement | function_definition | declaration | class_method_definition | instance_method_definition )* ;
    public ObjectiveC2ansiParser.implementation_definition_list_return implementation_definition_list() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.implementation_definition_list_return retval = new ObjectiveC2ansiParser.implementation_definition_list_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        ObjectiveC2ansiParser.synthesize_statement_return synthesize_statement118 = null;

        ObjectiveC2ansiParser.dynamic_statement_return dynamic_statement119 = null;

        ObjectiveC2ansiParser.function_definition_return function_definition120 = null;

        ObjectiveC2ansiParser.declaration_return declaration121 = null;

        ObjectiveC2ansiParser.class_method_definition_return class_method_definition122 = null;

        ObjectiveC2ansiParser.instance_method_definition_return instance_method_definition123 = null;



        try 
    	{
            // ObjectiveC2ansi.g:154:2: ( ( synthesize_statement | dynamic_statement | function_definition | declaration | class_method_definition | instance_method_definition )* )
            // ObjectiveC2ansi.g:154:2: ( synthesize_statement | dynamic_statement | function_definition | declaration | class_method_definition | instance_method_definition )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:154:2: ( synthesize_statement | dynamic_statement | function_definition | declaration | class_method_definition | instance_method_definition )*
            	do 
            	{
            	    int alt28 = 7;
            	    alt28 = dfa28.Predict(input);
            	    switch (alt28) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:154:3: synthesize_statement
            			    {

            			    	PushFollow(FOLLOW_synthesize_statement_in_implementation_definition_list695);
            			    	synthesize_statement118 = synthesize_statement();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, synthesize_statement118.Tree);

            			    }
            			    break;
            			case 2 :
            			    // ObjectiveC2ansi.g:154:26: dynamic_statement
            			    {

            			    	PushFollow(FOLLOW_dynamic_statement_in_implementation_definition_list699);
            			    	dynamic_statement119 = dynamic_statement();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, dynamic_statement119.Tree);

            			    }
            			    break;
            			case 3 :
            			    // ObjectiveC2ansi.g:154:46: function_definition
            			    {

            			    	PushFollow(FOLLOW_function_definition_in_implementation_definition_list703);
            			    	function_definition120 = function_definition();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, function_definition120.Tree);

            			    }
            			    break;
            			case 4 :
            			    // ObjectiveC2ansi.g:154:68: declaration
            			    {

            			    	PushFollow(FOLLOW_declaration_in_implementation_definition_list707);
            			    	declaration121 = declaration();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, declaration121.Tree);

            			    }
            			    break;
            			case 5 :
            			    // ObjectiveC2ansi.g:154:82: class_method_definition
            			    {

            			    	PushFollow(FOLLOW_class_method_definition_in_implementation_definition_list711);
            			    	class_method_definition122 = class_method_definition();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, class_method_definition122.Tree);

            			    }
            			    break;
            			case 6 :
            			    // ObjectiveC2ansi.g:154:108: instance_method_definition
            			    {

            			    	PushFollow(FOLLOW_instance_method_definition_in_implementation_definition_list715);
            			    	instance_method_definition123 = instance_method_definition();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, instance_method_definition123.Tree);

            			    }
            			    break;

            			default:
            			    goto loop28;
            	    }
            	} while (true);

            	loop28:
            		;	// Stops C# compiler whining that label 'loop28' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "implementation_definition_list"

    public class class_method_definition_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "class_method_definition"
    // ObjectiveC2ansi.g:156:0: class_method_definition : ( '+' method_definition ) ;
    public ObjectiveC2ansiParser.class_method_definition_return class_method_definition() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.class_method_definition_return retval = new ObjectiveC2ansiParser.class_method_definition_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal124 = null;
        ObjectiveC2ansiParser.method_definition_return method_definition125 = null;


        object char_literal124_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:157:2: ( ( '+' method_definition ) )
            // ObjectiveC2ansi.g:157:2: ( '+' method_definition )
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:157:2: ( '+' method_definition )
            	// ObjectiveC2ansi.g:157:3: '+' method_definition
            	{
            		char_literal124=(IToken)Match(input,83,FOLLOW_83_in_class_method_definition726); if (state.failed) return retval;
            		if ( state.backtracking == 0 )
            		{char_literal124_tree = (object)adaptor.Create(char_literal124);
            			adaptor.AddChild(root_0, char_literal124_tree);
            		}
            		PushFollow(FOLLOW_method_definition_in_class_method_definition728);
            		method_definition125 = method_definition();
            		state.followingStackPointer--;
            		if (state.failed) return retval;
            		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, method_definition125.Tree);

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "class_method_definition"

    public class instance_method_definition_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "instance_method_definition"
    // ObjectiveC2ansi.g:160:0: instance_method_definition : ( '-' method_definition ) ;
    public ObjectiveC2ansiParser.instance_method_definition_return instance_method_definition() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.instance_method_definition_return retval = new ObjectiveC2ansiParser.instance_method_definition_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal126 = null;
        ObjectiveC2ansiParser.method_definition_return method_definition127 = null;


        object char_literal126_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:161:2: ( ( '-' method_definition ) )
            // ObjectiveC2ansi.g:161:2: ( '-' method_definition )
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:161:2: ( '-' method_definition )
            	// ObjectiveC2ansi.g:161:3: '-' method_definition
            	{
            		char_literal126=(IToken)Match(input,22,FOLLOW_22_in_instance_method_definition740); if (state.failed) return retval;
            		if ( state.backtracking == 0 )
            		{char_literal126_tree = (object)adaptor.Create(char_literal126);
            			adaptor.AddChild(root_0, char_literal126_tree);
            		}
            		PushFollow(FOLLOW_method_definition_in_instance_method_definition742);
            		method_definition127 = method_definition();
            		state.followingStackPointer--;
            		if (state.failed) return retval;
            		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, method_definition127.Tree);

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "instance_method_definition"

    public class method_definition_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "method_definition"
    // ObjectiveC2ansi.g:164:0: method_definition : ( method_type )? method_selector ( init_declarator_list )? compound_statement ;
    public ObjectiveC2ansiParser.method_definition_return method_definition() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.method_definition_return retval = new ObjectiveC2ansiParser.method_definition_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        ObjectiveC2ansiParser.method_type_return method_type128 = null;

        ObjectiveC2ansiParser.method_selector_return method_selector129 = null;

        ObjectiveC2ansiParser.init_declarator_list_return init_declarator_list130 = null;

        ObjectiveC2ansiParser.compound_statement_return compound_statement131 = null;



        try 
    	{
            // ObjectiveC2ansi.g:165:2: ( ( method_type )? method_selector ( init_declarator_list )? compound_statement )
            // ObjectiveC2ansi.g:165:2: ( method_type )? method_selector ( init_declarator_list )? compound_statement
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:165:2: ( method_type )?
            	int alt29 = 2;
            	int LA29_0 = input.LA(1);

            	if ( (LA29_0 == 40) )
            	{
            	    alt29 = 1;
            	}
            	switch (alt29) 
            	{
            	    case 1 :
            	        // ObjectiveC2ansi.g:165:3: method_type
            	        {

            	        	PushFollow(FOLLOW_method_type_in_method_definition755);
            	        	method_type128 = method_type();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, method_type128.Tree);

            	        }
            	        break;

            	}

            	PushFollow(FOLLOW_method_selector_in_method_definition759);
            	method_selector129 = method_selector();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, method_selector129.Tree);
            	// ObjectiveC2ansi.g:165:33: ( init_declarator_list )?
            	int alt30 = 2;
            	int LA30_0 = input.LA(1);

            	if ( (LA30_0 == IDENTIFIER || LA30_0 == 40 || LA30_0 == 42) )
            	{
            	    alt30 = 1;
            	}
            	switch (alt30) 
            	{
            	    case 1 :
            	        // ObjectiveC2ansi.g:165:34: init_declarator_list
            	        {

            	        	PushFollow(FOLLOW_init_declarator_list_in_method_definition762);
            	        	init_declarator_list130 = init_declarator_list();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, init_declarator_list130.Tree);

            	        }
            	        break;

            	}

            	PushFollow(FOLLOW_compound_statement_in_method_definition766);
            	compound_statement131 = compound_statement();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, compound_statement131.Tree);

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "method_definition"

    public class method_selector_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "method_selector"
    // ObjectiveC2ansi.g:167:0: method_selector : ( selector | ( ( keyword_declarator )+ ( parameter_list )? ) );
    public ObjectiveC2ansiParser.method_selector_return method_selector() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.method_selector_return retval = new ObjectiveC2ansiParser.method_selector_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        ObjectiveC2ansiParser.selector_return selector132 = null;

        ObjectiveC2ansiParser.keyword_declarator_return keyword_declarator133 = null;

        ObjectiveC2ansiParser.parameter_list_return parameter_list134 = null;



        try 
    	{
            // ObjectiveC2ansi.g:168:2: ( selector | ( ( keyword_declarator )+ ( parameter_list )? ) )
            int alt33 = 2;
            int LA33_0 = input.LA(1);

            if ( (LA33_0 == IDENTIFIER) )
            {
                int LA33_1 = input.LA(2);

                if ( (LA33_1 == IDENTIFIER || LA33_1 == 40 || LA33_1 == 42 || LA33_1 == 51 || LA33_1 == 77) )
                {
                    alt33 = 1;
                }
                else if ( (LA33_1 == 50) )
                {
                    alt33 = 2;
                }
                else 
                {
                    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    NoViableAltException nvae_d33s1 =
                        new NoViableAltException("", 33, 1, input);

                    throw nvae_d33s1;
                }
            }
            else if ( (LA33_0 == 50) )
            {
                alt33 = 2;
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                NoViableAltException nvae_d33s0 =
                    new NoViableAltException("", 33, 0, input);

                throw nvae_d33s0;
            }
            switch (alt33) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:168:2: selector
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_selector_in_method_selector774);
                    	selector132 = selector();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, selector132.Tree);

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:168:12: ( ( keyword_declarator )+ ( parameter_list )? )
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	// ObjectiveC2ansi.g:168:12: ( ( keyword_declarator )+ ( parameter_list )? )
                    	// ObjectiveC2ansi.g:168:13: ( keyword_declarator )+ ( parameter_list )?
                    	{
                    		// ObjectiveC2ansi.g:168:13: ( keyword_declarator )+
                    		int cnt31 = 0;
                    		do 
                    		{
                    		    int alt31 = 2;
                    		    int LA31_0 = input.LA(1);

                    		    if ( (LA31_0 == IDENTIFIER) )
                    		    {
                    		        int LA31_2 = input.LA(2);

                    		        if ( (LA31_2 == 50) )
                    		        {
                    		            alt31 = 1;
                    		        }


                    		    }
                    		    else if ( (LA31_0 == 50) )
                    		    {
                    		        alt31 = 1;
                    		    }


                    		    switch (alt31) 
                    			{
                    				case 1 :
                    				    // ObjectiveC2ansi.g:0:0: keyword_declarator
                    				    {

                    				    	PushFollow(FOLLOW_keyword_declarator_in_method_selector778);
                    				    	keyword_declarator133 = keyword_declarator();
                    				    	state.followingStackPointer--;
                    				    	if (state.failed) return retval;
                    				    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, keyword_declarator133.Tree);

                    				    }
                    				    break;

                    				default:
                    				    if ( cnt31 >= 1 ) goto loop31;
                    				    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    			            EarlyExitException eee31 =
                    			                new EarlyExitException(31, input);
                    			            throw eee31;
                    		    }
                    		    cnt31++;
                    		} while (true);

                    		loop31:
                    			;	// Stops C# compiler whining that label 'loop31' has no statements

                    		// ObjectiveC2ansi.g:168:33: ( parameter_list )?
                    		int alt32 = 2;
                    		int LA32_0 = input.LA(1);

                    		if ( (LA32_0 == 100 || (LA32_0 >= 102 && LA32_0 <= 103) || (LA32_0 >= 105 && LA32_0 <= 106) || LA32_0 == 111 || (LA32_0 >= 113 && LA32_0 <= 115) || LA32_0 == 118 || (LA32_0 >= 120 && LA32_0 <= 123) || (LA32_0 >= 125 && LA32_0 <= 126) || LA32_0 == 129 || (LA32_0 >= 133 && LA32_0 <= 134) || (LA32_0 >= 136 && LA32_0 <= 137) || (LA32_0 >= 140 && LA32_0 <= 144)) )
                    		{
                    		    alt32 = 1;
                    		}
                    		else if ( (LA32_0 == IDENTIFIER) )
                    		{
                    		    int LA32_2 = input.LA(2);

                    		    if ( (synpred63_ObjectiveC2ansi()) )
                    		    {
                    		        alt32 = 1;
                    		    }
                    		}
                    		switch (alt32) 
                    		{
                    		    case 1 :
                    		        // ObjectiveC2ansi.g:168:34: parameter_list
                    		        {

                    		        	PushFollow(FOLLOW_parameter_list_in_method_selector782);
                    		        	parameter_list134 = parameter_list();
                    		        	state.followingStackPointer--;
                    		        	if (state.failed) return retval;
                    		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, parameter_list134.Tree);

                    		        }
                    		        break;

                    		}


                    	}


                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "method_selector"

    public class keyword_declarator_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "keyword_declarator"
    // ObjectiveC2ansi.g:171:0: keyword_declarator : ( selector )? ':' ( method_type )* IDENTIFIER ;
    public ObjectiveC2ansiParser.keyword_declarator_return keyword_declarator() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.keyword_declarator_return retval = new ObjectiveC2ansiParser.keyword_declarator_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal136 = null;
        IToken IDENTIFIER138 = null;
        ObjectiveC2ansiParser.selector_return selector135 = null;

        ObjectiveC2ansiParser.method_type_return method_type137 = null;


        object char_literal136_tree=null;
        object IDENTIFIER138_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:172:2: ( ( selector )? ':' ( method_type )* IDENTIFIER )
            // ObjectiveC2ansi.g:172:2: ( selector )? ':' ( method_type )* IDENTIFIER
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:172:2: ( selector )?
            	int alt34 = 2;
            	int LA34_0 = input.LA(1);

            	if ( (LA34_0 == IDENTIFIER) )
            	{
            	    alt34 = 1;
            	}
            	switch (alt34) 
            	{
            	    case 1 :
            	        // ObjectiveC2ansi.g:0:0: selector
            	        {

            	        	PushFollow(FOLLOW_selector_in_keyword_declarator796);
            	        	selector135 = selector();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, selector135.Tree);

            	        }
            	        break;

            	}

            	char_literal136=(IToken)Match(input,50,FOLLOW_50_in_keyword_declarator799); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal136_tree = (object)adaptor.Create(char_literal136);
            		adaptor.AddChild(root_0, char_literal136_tree);
            	}
            	// ObjectiveC2ansi.g:172:16: ( method_type )*
            	do 
            	{
            	    int alt35 = 2;
            	    int LA35_0 = input.LA(1);

            	    if ( (LA35_0 == 40) )
            	    {
            	        alt35 = 1;
            	    }


            	    switch (alt35) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:0:0: method_type
            			    {

            			    	PushFollow(FOLLOW_method_type_in_keyword_declarator801);
            			    	method_type137 = method_type();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, method_type137.Tree);

            			    }
            			    break;

            			default:
            			    goto loop35;
            	    }
            	} while (true);

            	loop35:
            		;	// Stops C# compiler whining that label 'loop35' has no statements

            	IDENTIFIER138=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_keyword_declarator804); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{IDENTIFIER138_tree = (object)adaptor.Create(IDENTIFIER138);
            		adaptor.AddChild(root_0, IDENTIFIER138_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "keyword_declarator"

    public class selector_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "selector"
    // ObjectiveC2ansi.g:174:0: selector : IDENTIFIER ;
    public ObjectiveC2ansiParser.selector_return selector() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.selector_return retval = new ObjectiveC2ansiParser.selector_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken IDENTIFIER139 = null;

        object IDENTIFIER139_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:175:1: ( IDENTIFIER )
            // ObjectiveC2ansi.g:175:1: IDENTIFIER
            {
            	root_0 = (object)adaptor.GetNilNode();

            	IDENTIFIER139=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_selector811); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{IDENTIFIER139_tree = (object)adaptor.Create(IDENTIFIER139);
            		adaptor.AddChild(root_0, IDENTIFIER139_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "selector"

    public class method_type_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "method_type"
    // ObjectiveC2ansi.g:177:0: method_type : '(' type_name ')' ;
    public ObjectiveC2ansiParser.method_type_return method_type() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.method_type_return retval = new ObjectiveC2ansiParser.method_type_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal140 = null;
        IToken char_literal142 = null;
        ObjectiveC2ansiParser.type_name_return type_name141 = null;


        object char_literal140_tree=null;
        object char_literal142_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:178:1: ( '(' type_name ')' )
            // ObjectiveC2ansi.g:178:1: '(' type_name ')'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	char_literal140=(IToken)Match(input,40,FOLLOW_40_in_method_type818); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal140_tree = (object)adaptor.Create(char_literal140);
            		adaptor.AddChild(root_0, char_literal140_tree);
            	}
            	PushFollow(FOLLOW_type_name_in_method_type820);
            	type_name141 = type_name();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, type_name141.Tree);
            	char_literal142=(IToken)Match(input,41,FOLLOW_41_in_method_type822); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal142_tree = (object)adaptor.Create(char_literal142);
            		adaptor.AddChild(root_0, char_literal142_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "method_type"

    public class type_specifier_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "type_specifier"
    // ObjectiveC2ansi.g:180:0: type_specifier : ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | ( 'id' ( protocol_reference_list )? ) | ( class_name ( protocol_reference_list )? ) | struct_or_union_specifier | enum_specifier | IDENTIFIER );
    public ObjectiveC2ansiParser.type_specifier_return type_specifier() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.type_specifier_return retval = new ObjectiveC2ansiParser.type_specifier_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal143 = null;
        IToken string_literal144 = null;
        IToken string_literal145 = null;
        IToken string_literal146 = null;
        IToken string_literal147 = null;
        IToken string_literal148 = null;
        IToken string_literal149 = null;
        IToken string_literal150 = null;
        IToken string_literal151 = null;
        IToken string_literal152 = null;
        IToken IDENTIFIER158 = null;
        ObjectiveC2ansiParser.protocol_reference_list_return protocol_reference_list153 = null;

        ObjectiveC2ansiParser.class_name_return class_name154 = null;

        ObjectiveC2ansiParser.protocol_reference_list_return protocol_reference_list155 = null;

        ObjectiveC2ansiParser.struct_or_union_specifier_return struct_or_union_specifier156 = null;

        ObjectiveC2ansiParser.enum_specifier_return enum_specifier157 = null;


        object string_literal143_tree=null;
        object string_literal144_tree=null;
        object string_literal145_tree=null;
        object string_literal146_tree=null;
        object string_literal147_tree=null;
        object string_literal148_tree=null;
        object string_literal149_tree=null;
        object string_literal150_tree=null;
        object string_literal151_tree=null;
        object string_literal152_tree=null;
        object IDENTIFIER158_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:181:0: ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | ( 'id' ( protocol_reference_list )? ) | ( class_name ( protocol_reference_list )? ) | struct_or_union_specifier | enum_specifier | IDENTIFIER )
            int alt38 = 14;
            alt38 = dfa38.Predict(input);
            switch (alt38) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:181:0: 'void'
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal143=(IToken)Match(input,143,FOLLOW_143_in_type_specifier829); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal143_tree = (object)adaptor.Create(string_literal143);
                    		adaptor.AddChild(root_0, string_literal143_tree);
                    	}

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:181:10: 'char'
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal144=(IToken)Match(input,105,FOLLOW_105_in_type_specifier833); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal144_tree = (object)adaptor.Create(string_literal144);
                    		adaptor.AddChild(root_0, string_literal144_tree);
                    	}

                    }
                    break;
                case 3 :
                    // ObjectiveC2ansi.g:181:19: 'short'
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal145=(IToken)Match(input,133,FOLLOW_133_in_type_specifier837); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal145_tree = (object)adaptor.Create(string_literal145);
                    		adaptor.AddChild(root_0, string_literal145_tree);
                    	}

                    }
                    break;
                case 4 :
                    // ObjectiveC2ansi.g:181:29: 'int'
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal146=(IToken)Match(input,122,FOLLOW_122_in_type_specifier841); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal146_tree = (object)adaptor.Create(string_literal146);
                    		adaptor.AddChild(root_0, string_literal146_tree);
                    	}

                    }
                    break;
                case 5 :
                    // ObjectiveC2ansi.g:181:37: 'long'
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal147=(IToken)Match(input,123,FOLLOW_123_in_type_specifier845); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal147_tree = (object)adaptor.Create(string_literal147);
                    		adaptor.AddChild(root_0, string_literal147_tree);
                    	}

                    }
                    break;
                case 6 :
                    // ObjectiveC2ansi.g:181:46: 'float'
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal148=(IToken)Match(input,115,FOLLOW_115_in_type_specifier849); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal148_tree = (object)adaptor.Create(string_literal148);
                    		adaptor.AddChild(root_0, string_literal148_tree);
                    	}

                    }
                    break;
                case 7 :
                    // ObjectiveC2ansi.g:181:56: 'double'
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal149=(IToken)Match(input,111,FOLLOW_111_in_type_specifier853); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal149_tree = (object)adaptor.Create(string_literal149);
                    		adaptor.AddChild(root_0, string_literal149_tree);
                    	}

                    }
                    break;
                case 8 :
                    // ObjectiveC2ansi.g:181:67: 'signed'
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal150=(IToken)Match(input,134,FOLLOW_134_in_type_specifier857); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal150_tree = (object)adaptor.Create(string_literal150);
                    		adaptor.AddChild(root_0, string_literal150_tree);
                    	}

                    }
                    break;
                case 9 :
                    // ObjectiveC2ansi.g:181:78: 'unsigned'
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal151=(IToken)Match(input,142,FOLLOW_142_in_type_specifier861); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal151_tree = (object)adaptor.Create(string_literal151);
                    		adaptor.AddChild(root_0, string_literal151_tree);
                    	}

                    }
                    break;
                case 10 :
                    // ObjectiveC2ansi.g:182:4: ( 'id' ( protocol_reference_list )? )
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	// ObjectiveC2ansi.g:182:4: ( 'id' ( protocol_reference_list )? )
                    	// ObjectiveC2ansi.g:182:5: 'id' ( protocol_reference_list )?
                    	{
                    		string_literal152=(IToken)Match(input,118,FOLLOW_118_in_type_specifier868); if (state.failed) return retval;
                    		if ( state.backtracking == 0 )
                    		{string_literal152_tree = (object)adaptor.Create(string_literal152);
                    			adaptor.AddChild(root_0, string_literal152_tree);
                    		}
                    		// ObjectiveC2ansi.g:182:10: ( protocol_reference_list )?
                    		int alt36 = 2;
                    		int LA36_0 = input.LA(1);

                    		if ( (LA36_0 == 86) )
                    		{
                    		    alt36 = 1;
                    		}
                    		switch (alt36) 
                    		{
                    		    case 1 :
                    		        // ObjectiveC2ansi.g:182:12: protocol_reference_list
                    		        {

                    		        	PushFollow(FOLLOW_protocol_reference_list_in_type_specifier872);
                    		        	protocol_reference_list153 = protocol_reference_list();
                    		        	state.followingStackPointer--;
                    		        	if (state.failed) return retval;
                    		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, protocol_reference_list153.Tree);

                    		        }
                    		        break;

                    		}


                    	}


                    }
                    break;
                case 11 :
                    // ObjectiveC2ansi.g:183:4: ( class_name ( protocol_reference_list )? )
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	// ObjectiveC2ansi.g:183:4: ( class_name ( protocol_reference_list )? )
                    	// ObjectiveC2ansi.g:183:5: class_name ( protocol_reference_list )?
                    	{
                    		PushFollow(FOLLOW_class_name_in_type_specifier883);
                    		class_name154 = class_name();
                    		state.followingStackPointer--;
                    		if (state.failed) return retval;
                    		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, class_name154.Tree);
                    		// ObjectiveC2ansi.g:183:16: ( protocol_reference_list )?
                    		int alt37 = 2;
                    		int LA37_0 = input.LA(1);

                    		if ( (LA37_0 == 86) )
                    		{
                    		    alt37 = 1;
                    		}
                    		switch (alt37) 
                    		{
                    		    case 1 :
                    		        // ObjectiveC2ansi.g:183:18: protocol_reference_list
                    		        {

                    		        	PushFollow(FOLLOW_protocol_reference_list_in_type_specifier887);
                    		        	protocol_reference_list155 = protocol_reference_list();
                    		        	state.followingStackPointer--;
                    		        	if (state.failed) return retval;
                    		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, protocol_reference_list155.Tree);

                    		        }
                    		        break;

                    		}


                    	}


                    }
                    break;
                case 12 :
                    // ObjectiveC2ansi.g:184:4: struct_or_union_specifier
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_struct_or_union_specifier_in_type_specifier896);
                    	struct_or_union_specifier156 = struct_or_union_specifier();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, struct_or_union_specifier156.Tree);

                    }
                    break;
                case 13 :
                    // ObjectiveC2ansi.g:185:4: enum_specifier
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_enum_specifier_in_type_specifier901);
                    	enum_specifier157 = enum_specifier();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, enum_specifier157.Tree);

                    }
                    break;
                case 14 :
                    // ObjectiveC2ansi.g:186:4: IDENTIFIER
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	IDENTIFIER158=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_type_specifier907); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{IDENTIFIER158_tree = (object)adaptor.Create(IDENTIFIER158);
                    		adaptor.AddChild(root_0, IDENTIFIER158_tree);
                    	}

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "type_specifier"

    public class type_qualifier_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "type_qualifier"
    // ObjectiveC2ansi.g:188:0: type_qualifier : ( 'const' | 'volatile' | protocol_qualifier );
    public ObjectiveC2ansiParser.type_qualifier_return type_qualifier() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.type_qualifier_return retval = new ObjectiveC2ansiParser.type_qualifier_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal159 = null;
        IToken string_literal160 = null;
        ObjectiveC2ansiParser.protocol_qualifier_return protocol_qualifier161 = null;


        object string_literal159_tree=null;
        object string_literal160_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:189:2: ( 'const' | 'volatile' | protocol_qualifier )
            int alt39 = 3;
            switch ( input.LA(1) ) 
            {
            case 106:
            	{
                alt39 = 1;
                }
                break;
            case 144:
            	{
                alt39 = 2;
                }
                break;
            case 102:
            case 103:
            case 120:
            case 121:
            case 125:
            case 126:
            	{
                alt39 = 3;
                }
                break;
            	default:
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d39s0 =
            	        new NoViableAltException("", 39, 0, input);

            	    throw nvae_d39s0;
            }

            switch (alt39) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:189:2: 'const'
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal159=(IToken)Match(input,106,FOLLOW_106_in_type_qualifier915); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal159_tree = (object)adaptor.Create(string_literal159);
                    		adaptor.AddChild(root_0, string_literal159_tree);
                    	}

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:189:12: 'volatile'
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal160=(IToken)Match(input,144,FOLLOW_144_in_type_qualifier919); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal160_tree = (object)adaptor.Create(string_literal160);
                    		adaptor.AddChild(root_0, string_literal160_tree);
                    	}

                    }
                    break;
                case 3 :
                    // ObjectiveC2ansi.g:189:25: protocol_qualifier
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_protocol_qualifier_in_type_qualifier923);
                    	protocol_qualifier161 = protocol_qualifier();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, protocol_qualifier161.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "type_qualifier"

    public class protocol_qualifier_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "protocol_qualifier"
    // ObjectiveC2ansi.g:191:0: protocol_qualifier : ( 'in' | 'out' | 'inout' | 'bycopy' | 'byref' | 'oneway' );
    public ObjectiveC2ansiParser.protocol_qualifier_return protocol_qualifier() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.protocol_qualifier_return retval = new ObjectiveC2ansiParser.protocol_qualifier_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken set162 = null;

        object set162_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:192:2: ( 'in' | 'out' | 'inout' | 'bycopy' | 'byref' | 'oneway' )
            // ObjectiveC2ansi.g:
            {
            	root_0 = (object)adaptor.GetNilNode();

            	set162 = (IToken)input.LT(1);
            	if ( (input.LA(1) >= 102 && input.LA(1) <= 103) || (input.LA(1) >= 120 && input.LA(1) <= 121) || (input.LA(1) >= 125 && input.LA(1) <= 126) ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set162));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "protocol_qualifier"

    public class primary_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "primary_expression"
    // ObjectiveC2ansi.g:194:0: primary_expression : ( IDENTIFIER | constant | STRING_LITERAL | ( '(' expression ')' ) | 'self' | message_expression | selector_expression | protocol_expression | encode_expression );
    public ObjectiveC2ansiParser.primary_expression_return primary_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.primary_expression_return retval = new ObjectiveC2ansiParser.primary_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken IDENTIFIER163 = null;
        IToken STRING_LITERAL165 = null;
        IToken char_literal166 = null;
        IToken char_literal168 = null;
        IToken string_literal169 = null;
        ObjectiveC2ansiParser.constant_return constant164 = null;

        ObjectiveC2ansiParser.expression_return expression167 = null;

        ObjectiveC2ansiParser.message_expression_return message_expression170 = null;

        ObjectiveC2ansiParser.selector_expression_return selector_expression171 = null;

        ObjectiveC2ansiParser.protocol_expression_return protocol_expression172 = null;

        ObjectiveC2ansiParser.encode_expression_return encode_expression173 = null;


        object IDENTIFIER163_tree=null;
        object STRING_LITERAL165_tree=null;
        object char_literal166_tree=null;
        object char_literal168_tree=null;
        object string_literal169_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:195:2: ( IDENTIFIER | constant | STRING_LITERAL | ( '(' expression ')' ) | 'self' | message_expression | selector_expression | protocol_expression | encode_expression )
            int alt40 = 9;
            switch ( input.LA(1) ) 
            {
            case IDENTIFIER:
            	{
                alt40 = 1;
                }
                break;
            case CHARACTER_LITERAL:
            case DECIMAL_LITERAL:
            case FLOATING_POINT_LITERAL:
            case HEX_LITERAL:
            case OCTAL_LITERAL:
            	{
                alt40 = 2;
                }
                break;
            case STRING_LITERAL:
            	{
                alt40 = 3;
                }
                break;
            case 40:
            	{
                alt40 = 4;
                }
                break;
            case 132:
            	{
                alt40 = 5;
                }
                break;
            case 72:
            	{
                alt40 = 6;
                }
                break;
            case 67:
            	{
                alt40 = 7;
                }
                break;
            case 65:
            	{
                alt40 = 8;
                }
                break;
            case 56:
            	{
                alt40 = 9;
                }
                break;
            	default:
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d40s0 =
            	        new NoViableAltException("", 40, 0, input);

            	    throw nvae_d40s0;
            }

            switch (alt40) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:195:2: IDENTIFIER
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	IDENTIFIER163=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_primary_expression959); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{IDENTIFIER163_tree = (object)adaptor.Create(IDENTIFIER163);
                    		adaptor.AddChild(root_0, IDENTIFIER163_tree);
                    	}

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:196:4: constant
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_constant_in_primary_expression964);
                    	constant164 = constant();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, constant164.Tree);

                    }
                    break;
                case 3 :
                    // ObjectiveC2ansi.g:197:4: STRING_LITERAL
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	STRING_LITERAL165=(IToken)Match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_primary_expression969); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{STRING_LITERAL165_tree = (object)adaptor.Create(STRING_LITERAL165);
                    		adaptor.AddChild(root_0, STRING_LITERAL165_tree);
                    	}

                    }
                    break;
                case 4 :
                    // ObjectiveC2ansi.g:198:4: ( '(' expression ')' )
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	// ObjectiveC2ansi.g:198:4: ( '(' expression ')' )
                    	// ObjectiveC2ansi.g:198:5: '(' expression ')'
                    	{
                    		char_literal166=(IToken)Match(input,40,FOLLOW_40_in_primary_expression975); if (state.failed) return retval;
                    		if ( state.backtracking == 0 )
                    		{char_literal166_tree = (object)adaptor.Create(char_literal166);
                    			adaptor.AddChild(root_0, char_literal166_tree);
                    		}
                    		PushFollow(FOLLOW_expression_in_primary_expression977);
                    		expression167 = expression();
                    		state.followingStackPointer--;
                    		if (state.failed) return retval;
                    		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression167.Tree);
                    		char_literal168=(IToken)Match(input,41,FOLLOW_41_in_primary_expression979); if (state.failed) return retval;
                    		if ( state.backtracking == 0 )
                    		{char_literal168_tree = (object)adaptor.Create(char_literal168);
                    			adaptor.AddChild(root_0, char_literal168_tree);
                    		}

                    	}


                    }
                    break;
                case 5 :
                    // ObjectiveC2ansi.g:199:4: 'self'
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal169=(IToken)Match(input,132,FOLLOW_132_in_primary_expression985); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal169_tree = (object)adaptor.Create(string_literal169);
                    		adaptor.AddChild(root_0, string_literal169_tree);
                    	}

                    }
                    break;
                case 6 :
                    // ObjectiveC2ansi.g:200:4: message_expression
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_message_expression_in_primary_expression990);
                    	message_expression170 = message_expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, message_expression170.Tree);

                    }
                    break;
                case 7 :
                    // ObjectiveC2ansi.g:201:4: selector_expression
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_selector_expression_in_primary_expression995);
                    	selector_expression171 = selector_expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, selector_expression171.Tree);

                    }
                    break;
                case 8 :
                    // ObjectiveC2ansi.g:202:4: protocol_expression
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_protocol_expression_in_primary_expression1000);
                    	protocol_expression172 = protocol_expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, protocol_expression172.Tree);

                    }
                    break;
                case 9 :
                    // ObjectiveC2ansi.g:203:4: encode_expression
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_encode_expression_in_primary_expression1005);
                    	encode_expression173 = encode_expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, encode_expression173.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "primary_expression"

    public class message_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "message_expression"
    // ObjectiveC2ansi.g:205:0: message_expression : ( '[' receiver message_selector ']' ) ;
    public ObjectiveC2ansiParser.message_expression_return message_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.message_expression_return retval = new ObjectiveC2ansiParser.message_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal174 = null;
        IToken char_literal177 = null;
        ObjectiveC2ansiParser.receiver_return receiver175 = null;

        ObjectiveC2ansiParser.message_selector_return message_selector176 = null;


        object char_literal174_tree=null;
        object char_literal177_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:206:2: ( ( '[' receiver message_selector ']' ) )
            // ObjectiveC2ansi.g:206:2: ( '[' receiver message_selector ']' )
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:206:2: ( '[' receiver message_selector ']' )
            	// ObjectiveC2ansi.g:206:3: '[' receiver message_selector ']'
            	{
            		char_literal174=(IToken)Match(input,72,FOLLOW_72_in_message_expression1014); if (state.failed) return retval;
            		if ( state.backtracking == 0 )
            		{char_literal174_tree = (object)adaptor.Create(char_literal174);
            			adaptor.AddChild(root_0, char_literal174_tree);
            		}
            		PushFollow(FOLLOW_receiver_in_message_expression1016);
            		receiver175 = receiver();
            		state.followingStackPointer--;
            		if (state.failed) return retval;
            		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, receiver175.Tree);
            		PushFollow(FOLLOW_message_selector_in_message_expression1018);
            		message_selector176 = message_selector();
            		state.followingStackPointer--;
            		if (state.failed) return retval;
            		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, message_selector176.Tree);
            		char_literal177=(IToken)Match(input,74,FOLLOW_74_in_message_expression1020); if (state.failed) return retval;
            		if ( state.backtracking == 0 )
            		{char_literal177_tree = (object)adaptor.Create(char_literal177);
            			adaptor.AddChild(root_0, char_literal177_tree);
            		}

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "message_expression"

    public class receiver_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "receiver"
    // ObjectiveC2ansi.g:209:0: receiver : ( expression | class_name | 'super' );
    public ObjectiveC2ansiParser.receiver_return receiver() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.receiver_return retval = new ObjectiveC2ansiParser.receiver_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal180 = null;
        ObjectiveC2ansiParser.expression_return expression178 = null;

        ObjectiveC2ansiParser.class_name_return class_name179 = null;


        object string_literal180_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:210:2: ( expression | class_name | 'super' )
            int alt41 = 3;
            switch ( input.LA(1) ) 
            {
            case CHARACTER_LITERAL:
            case DECIMAL_LITERAL:
            case FLOATING_POINT_LITERAL:
            case HEX_LITERAL:
            case OCTAL_LITERAL:
            case STRING_LITERAL:
            case 22:
            case 23:
            case 24:
            case 37:
            case 40:
            case 42:
            case 56:
            case 65:
            case 67:
            case 72:
            case 82:
            case 84:
            case 132:
            case 135:
            	{
                alt41 = 1;
                }
                break;
            case IDENTIFIER:
            	{
                int LA41_2 = input.LA(2);

                if ( (synpred96_ObjectiveC2ansi()) )
                {
                    alt41 = 1;
                }
                else if ( (synpred97_ObjectiveC2ansi()) )
                {
                    alt41 = 2;
                }
                else 
                {
                    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    NoViableAltException nvae_d41s2 =
                        new NoViableAltException("", 41, 2, input);

                    throw nvae_d41s2;
                }
                }
                break;
            case 138:
            	{
                alt41 = 3;
                }
                break;
            	default:
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d41s0 =
            	        new NoViableAltException("", 41, 0, input);

            	    throw nvae_d41s0;
            }

            switch (alt41) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:210:2: expression
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_expression_in_receiver1031);
                    	expression178 = expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression178.Tree);

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:211:4: class_name
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_class_name_in_receiver1036);
                    	class_name179 = class_name();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, class_name179.Tree);

                    }
                    break;
                case 3 :
                    // ObjectiveC2ansi.g:212:4: 'super'
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	string_literal180=(IToken)Match(input,138,FOLLOW_138_in_receiver1042); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal180_tree = (object)adaptor.Create(string_literal180);
                    		adaptor.AddChild(root_0, string_literal180_tree);
                    	}

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "receiver"

    public class message_selector_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "message_selector"
    // ObjectiveC2ansi.g:214:0: message_selector : ( selector | ( keyword_argument )+ );
    public ObjectiveC2ansiParser.message_selector_return message_selector() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.message_selector_return retval = new ObjectiveC2ansiParser.message_selector_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        ObjectiveC2ansiParser.selector_return selector181 = null;

        ObjectiveC2ansiParser.keyword_argument_return keyword_argument182 = null;



        try 
    	{
            // ObjectiveC2ansi.g:215:2: ( selector | ( keyword_argument )+ )
            int alt43 = 2;
            int LA43_0 = input.LA(1);

            if ( (LA43_0 == IDENTIFIER) )
            {
                int LA43_1 = input.LA(2);

                if ( (LA43_1 == 74) )
                {
                    alt43 = 1;
                }
                else if ( (LA43_1 == 50) )
                {
                    alt43 = 2;
                }
                else 
                {
                    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    NoViableAltException nvae_d43s1 =
                        new NoViableAltException("", 43, 1, input);

                    throw nvae_d43s1;
                }
            }
            else if ( (LA43_0 == 50) )
            {
                alt43 = 2;
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                NoViableAltException nvae_d43s0 =
                    new NoViableAltException("", 43, 0, input);

                throw nvae_d43s0;
            }
            switch (alt43) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:215:2: selector
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_selector_in_message_selector1050);
                    	selector181 = selector();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, selector181.Tree);

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:216:4: ( keyword_argument )+
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	// ObjectiveC2ansi.g:216:4: ( keyword_argument )+
                    	int cnt42 = 0;
                    	do 
                    	{
                    	    int alt42 = 2;
                    	    int LA42_0 = input.LA(1);

                    	    if ( (LA42_0 == IDENTIFIER || LA42_0 == 50) )
                    	    {
                    	        alt42 = 1;
                    	    }


                    	    switch (alt42) 
                    		{
                    			case 1 :
                    			    // ObjectiveC2ansi.g:0:0: keyword_argument
                    			    {

                    			    	PushFollow(FOLLOW_keyword_argument_in_message_selector1055);
                    			    	keyword_argument182 = keyword_argument();
                    			    	state.followingStackPointer--;
                    			    	if (state.failed) return retval;
                    			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, keyword_argument182.Tree);

                    			    }
                    			    break;

                    			default:
                    			    if ( cnt42 >= 1 ) goto loop42;
                    			    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    		            EarlyExitException eee42 =
                    		                new EarlyExitException(42, input);
                    		            throw eee42;
                    	    }
                    	    cnt42++;
                    	} while (true);

                    	loop42:
                    		;	// Stops C# compiler whining that label 'loop42' has no statements


                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "message_selector"

    public class keyword_argument_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "keyword_argument"
    // ObjectiveC2ansi.g:218:0: keyword_argument : ( selector )? ':' expression ;
    public ObjectiveC2ansiParser.keyword_argument_return keyword_argument() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.keyword_argument_return retval = new ObjectiveC2ansiParser.keyword_argument_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal184 = null;
        ObjectiveC2ansiParser.selector_return selector183 = null;

        ObjectiveC2ansiParser.expression_return expression185 = null;


        object char_literal184_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:219:2: ( ( selector )? ':' expression )
            // ObjectiveC2ansi.g:219:2: ( selector )? ':' expression
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:219:2: ( selector )?
            	int alt44 = 2;
            	int LA44_0 = input.LA(1);

            	if ( (LA44_0 == IDENTIFIER) )
            	{
            	    alt44 = 1;
            	}
            	switch (alt44) 
            	{
            	    case 1 :
            	        // ObjectiveC2ansi.g:0:0: selector
            	        {

            	        	PushFollow(FOLLOW_selector_in_keyword_argument1064);
            	        	selector183 = selector();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, selector183.Tree);

            	        }
            	        break;

            	}

            	char_literal184=(IToken)Match(input,50,FOLLOW_50_in_keyword_argument1067); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal184_tree = (object)adaptor.Create(char_literal184);
            		adaptor.AddChild(root_0, char_literal184_tree);
            	}
            	PushFollow(FOLLOW_expression_in_keyword_argument1069);
            	expression185 = expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression185.Tree);

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "keyword_argument"

    public class selector_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "selector_expression"
    // ObjectiveC2ansi.g:221:0: selector_expression : '@selector' '(' selector_name ')' ;
    public ObjectiveC2ansiParser.selector_expression_return selector_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.selector_expression_return retval = new ObjectiveC2ansiParser.selector_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal186 = null;
        IToken char_literal187 = null;
        IToken char_literal189 = null;
        ObjectiveC2ansiParser.selector_name_return selector_name188 = null;


        object string_literal186_tree=null;
        object char_literal187_tree=null;
        object char_literal189_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:222:2: ( '@selector' '(' selector_name ')' )
            // ObjectiveC2ansi.g:222:2: '@selector' '(' selector_name ')'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal186=(IToken)Match(input,67,FOLLOW_67_in_selector_expression1077); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal186_tree = (object)adaptor.Create(string_literal186);
            		adaptor.AddChild(root_0, string_literal186_tree);
            	}
            	char_literal187=(IToken)Match(input,40,FOLLOW_40_in_selector_expression1079); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal187_tree = (object)adaptor.Create(char_literal187);
            		adaptor.AddChild(root_0, char_literal187_tree);
            	}
            	PushFollow(FOLLOW_selector_name_in_selector_expression1081);
            	selector_name188 = selector_name();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, selector_name188.Tree);
            	char_literal189=(IToken)Match(input,41,FOLLOW_41_in_selector_expression1083); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal189_tree = (object)adaptor.Create(char_literal189);
            		adaptor.AddChild(root_0, char_literal189_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "selector_expression"

    public class selector_name_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "selector_name"
    // ObjectiveC2ansi.g:224:0: selector_name : ( selector | ( ( selector )? ':' )+ );
    public ObjectiveC2ansiParser.selector_name_return selector_name() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.selector_name_return retval = new ObjectiveC2ansiParser.selector_name_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal192 = null;
        ObjectiveC2ansiParser.selector_return selector190 = null;

        ObjectiveC2ansiParser.selector_return selector191 = null;


        object char_literal192_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:225:2: ( selector | ( ( selector )? ':' )+ )
            int alt47 = 2;
            int LA47_0 = input.LA(1);

            if ( (LA47_0 == IDENTIFIER) )
            {
                int LA47_1 = input.LA(2);

                if ( (LA47_1 == 41) )
                {
                    alt47 = 1;
                }
                else if ( (LA47_1 == 50) )
                {
                    alt47 = 2;
                }
                else 
                {
                    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    NoViableAltException nvae_d47s1 =
                        new NoViableAltException("", 47, 1, input);

                    throw nvae_d47s1;
                }
            }
            else if ( (LA47_0 == 50) )
            {
                alt47 = 2;
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                NoViableAltException nvae_d47s0 =
                    new NoViableAltException("", 47, 0, input);

                throw nvae_d47s0;
            }
            switch (alt47) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:225:2: selector
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_selector_in_selector_name1091);
                    	selector190 = selector();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, selector190.Tree);

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:226:4: ( ( selector )? ':' )+
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	// ObjectiveC2ansi.g:226:4: ( ( selector )? ':' )+
                    	int cnt46 = 0;
                    	do 
                    	{
                    	    int alt46 = 2;
                    	    int LA46_0 = input.LA(1);

                    	    if ( (LA46_0 == IDENTIFIER || LA46_0 == 50) )
                    	    {
                    	        alt46 = 1;
                    	    }


                    	    switch (alt46) 
                    		{
                    			case 1 :
                    			    // ObjectiveC2ansi.g:226:5: ( selector )? ':'
                    			    {

                    			    	// ObjectiveC2ansi.g:226:5: ( selector )?
                    			    	int alt45 = 2;
                    			    	int LA45_0 = input.LA(1);

                    			    	if ( (LA45_0 == IDENTIFIER) )
                    			    	{
                    			    	    alt45 = 1;
                    			    	}
                    			    	switch (alt45) 
                    			    	{
                    			    	    case 1 :
                    			    	        // ObjectiveC2ansi.g:0:0: selector
                    			    	        {

                    			    	        	PushFollow(FOLLOW_selector_in_selector_name1097);
                    			    	        	selector191 = selector();
                    			    	        	state.followingStackPointer--;
                    			    	        	if (state.failed) return retval;
                    			    	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, selector191.Tree);

                    			    	        }
                    			    	        break;

                    			    	}

                    			    	char_literal192=(IToken)Match(input,50,FOLLOW_50_in_selector_name1100); if (state.failed) return retval;
                    			    	if ( state.backtracking == 0 )
                    			    	{char_literal192_tree = (object)adaptor.Create(char_literal192);
                    			    		adaptor.AddChild(root_0, char_literal192_tree);
                    			    	}

                    			    }
                    			    break;

                    			default:
                    			    if ( cnt46 >= 1 ) goto loop46;
                    			    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    		            EarlyExitException eee46 =
                    		                new EarlyExitException(46, input);
                    		            throw eee46;
                    	    }
                    	    cnt46++;
                    	} while (true);

                    	loop46:
                    		;	// Stops C# compiler whining that label 'loop46' has no statements


                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "selector_name"

    public class protocol_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "protocol_expression"
    // ObjectiveC2ansi.g:228:0: protocol_expression : '@protocol' '(' protocol_name ')' ;
    public ObjectiveC2ansiParser.protocol_expression_return protocol_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.protocol_expression_return retval = new ObjectiveC2ansiParser.protocol_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal193 = null;
        IToken char_literal194 = null;
        IToken char_literal196 = null;
        ObjectiveC2ansiParser.protocol_name_return protocol_name195 = null;


        object string_literal193_tree=null;
        object char_literal194_tree=null;
        object char_literal196_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:229:2: ( '@protocol' '(' protocol_name ')' )
            // ObjectiveC2ansi.g:229:2: '@protocol' '(' protocol_name ')'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal193=(IToken)Match(input,65,FOLLOW_65_in_protocol_expression1110); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal193_tree = (object)adaptor.Create(string_literal193);
            		adaptor.AddChild(root_0, string_literal193_tree);
            	}
            	char_literal194=(IToken)Match(input,40,FOLLOW_40_in_protocol_expression1112); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal194_tree = (object)adaptor.Create(char_literal194);
            		adaptor.AddChild(root_0, char_literal194_tree);
            	}
            	PushFollow(FOLLOW_protocol_name_in_protocol_expression1114);
            	protocol_name195 = protocol_name();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, protocol_name195.Tree);
            	char_literal196=(IToken)Match(input,41,FOLLOW_41_in_protocol_expression1116); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal196_tree = (object)adaptor.Create(char_literal196);
            		adaptor.AddChild(root_0, char_literal196_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "protocol_expression"

    public class encode_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "encode_expression"
    // ObjectiveC2ansi.g:231:0: encode_expression : '@encode' '(' type_name ')' ;
    public ObjectiveC2ansiParser.encode_expression_return encode_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.encode_expression_return retval = new ObjectiveC2ansiParser.encode_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal197 = null;
        IToken char_literal198 = null;
        IToken char_literal200 = null;
        ObjectiveC2ansiParser.type_name_return type_name199 = null;


        object string_literal197_tree=null;
        object char_literal198_tree=null;
        object char_literal200_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:232:2: ( '@encode' '(' type_name ')' )
            // ObjectiveC2ansi.g:232:2: '@encode' '(' type_name ')'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal197=(IToken)Match(input,56,FOLLOW_56_in_encode_expression1124); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal197_tree = (object)adaptor.Create(string_literal197);
            		adaptor.AddChild(root_0, string_literal197_tree);
            	}
            	char_literal198=(IToken)Match(input,40,FOLLOW_40_in_encode_expression1126); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal198_tree = (object)adaptor.Create(char_literal198);
            		adaptor.AddChild(root_0, char_literal198_tree);
            	}
            	PushFollow(FOLLOW_type_name_in_encode_expression1128);
            	type_name199 = type_name();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, type_name199.Tree);
            	char_literal200=(IToken)Match(input,41,FOLLOW_41_in_encode_expression1130); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal200_tree = (object)adaptor.Create(char_literal200);
            		adaptor.AddChild(root_0, char_literal200_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "encode_expression"

    public class exception_declarator_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "exception_declarator"
    // ObjectiveC2ansi.g:234:0: exception_declarator : declarator ;
    public ObjectiveC2ansiParser.exception_declarator_return exception_declarator() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.exception_declarator_return retval = new ObjectiveC2ansiParser.exception_declarator_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        ObjectiveC2ansiParser.declarator_return declarator201 = null;



        try 
    	{
            // ObjectiveC2ansi.g:235:2: ( declarator )
            // ObjectiveC2ansi.g:235:2: declarator
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_declarator_in_exception_declarator1138);
            	declarator201 = declarator();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, declarator201.Tree);

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "exception_declarator"

    public class try_statement_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "try_statement"
    // ObjectiveC2ansi.g:237:0: try_statement : '@trystatement' ;
    public ObjectiveC2ansiParser.try_statement_return try_statement() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.try_statement_return retval = new ObjectiveC2ansiParser.try_statement_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal202 = null;

        object string_literal202_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:238:2: ( '@trystatement' )
            // ObjectiveC2ansi.g:238:2: '@trystatement'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal202=(IToken)Match(input,71,FOLLOW_71_in_try_statement1146); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal202_tree = (object)adaptor.Create(string_literal202);
            		adaptor.AddChild(root_0, string_literal202_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "try_statement"

    public class catch_statement_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "catch_statement"
    // ObjectiveC2ansi.g:240:0: catch_statement : '@catch' '(' exception_declarator ')' statement ;
    public ObjectiveC2ansiParser.catch_statement_return catch_statement() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.catch_statement_return retval = new ObjectiveC2ansiParser.catch_statement_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal203 = null;
        IToken char_literal204 = null;
        IToken char_literal206 = null;
        ObjectiveC2ansiParser.exception_declarator_return exception_declarator205 = null;

        ObjectiveC2ansiParser.statement_return statement207 = null;


        object string_literal203_tree=null;
        object char_literal204_tree=null;
        object char_literal206_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:241:2: ( '@catch' '(' exception_declarator ')' statement )
            // ObjectiveC2ansi.g:241:2: '@catch' '(' exception_declarator ')' statement
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal203=(IToken)Match(input,53,FOLLOW_53_in_catch_statement1154); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal203_tree = (object)adaptor.Create(string_literal203);
            		adaptor.AddChild(root_0, string_literal203_tree);
            	}
            	char_literal204=(IToken)Match(input,40,FOLLOW_40_in_catch_statement1156); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal204_tree = (object)adaptor.Create(char_literal204);
            		adaptor.AddChild(root_0, char_literal204_tree);
            	}
            	PushFollow(FOLLOW_exception_declarator_in_catch_statement1157);
            	exception_declarator205 = exception_declarator();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exception_declarator205.Tree);
            	char_literal206=(IToken)Match(input,41,FOLLOW_41_in_catch_statement1158); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal206_tree = (object)adaptor.Create(char_literal206);
            		adaptor.AddChild(root_0, char_literal206_tree);
            	}
            	PushFollow(FOLLOW_statement_in_catch_statement1159);
            	statement207 = statement();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, statement207.Tree);

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "catch_statement"

    public class finally_statement_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "finally_statement"
    // ObjectiveC2ansi.g:243:0: finally_statement : '@finally' statement ;
    public ObjectiveC2ansiParser.finally_statement_return finally_statement() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.finally_statement_return retval = new ObjectiveC2ansiParser.finally_statement_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal208 = null;
        ObjectiveC2ansiParser.statement_return statement209 = null;


        object string_literal208_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:244:2: ( '@finally' statement )
            // ObjectiveC2ansi.g:244:2: '@finally' statement
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal208=(IToken)Match(input,58,FOLLOW_58_in_finally_statement1167); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal208_tree = (object)adaptor.Create(string_literal208);
            		adaptor.AddChild(root_0, string_literal208_tree);
            	}
            	PushFollow(FOLLOW_statement_in_finally_statement1169);
            	statement209 = statement();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, statement209.Tree);

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "finally_statement"

    public class throw_statement_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "throw_statement"
    // ObjectiveC2ansi.g:246:0: throw_statement : '@throw' '(' IDENTIFIER ')' ;
    public ObjectiveC2ansiParser.throw_statement_return throw_statement() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.throw_statement_return retval = new ObjectiveC2ansiParser.throw_statement_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal210 = null;
        IToken char_literal211 = null;
        IToken IDENTIFIER212 = null;
        IToken char_literal213 = null;

        object string_literal210_tree=null;
        object char_literal211_tree=null;
        object IDENTIFIER212_tree=null;
        object char_literal213_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:247:2: ( '@throw' '(' IDENTIFIER ')' )
            // ObjectiveC2ansi.g:247:2: '@throw' '(' IDENTIFIER ')'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal210=(IToken)Match(input,70,FOLLOW_70_in_throw_statement1177); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal210_tree = (object)adaptor.Create(string_literal210);
            		adaptor.AddChild(root_0, string_literal210_tree);
            	}
            	char_literal211=(IToken)Match(input,40,FOLLOW_40_in_throw_statement1179); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal211_tree = (object)adaptor.Create(char_literal211);
            		adaptor.AddChild(root_0, char_literal211_tree);
            	}
            	IDENTIFIER212=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_throw_statement1180); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{IDENTIFIER212_tree = (object)adaptor.Create(IDENTIFIER212);
            		adaptor.AddChild(root_0, IDENTIFIER212_tree);
            	}
            	char_literal213=(IToken)Match(input,41,FOLLOW_41_in_throw_statement1181); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal213_tree = (object)adaptor.Create(char_literal213);
            		adaptor.AddChild(root_0, char_literal213_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "throw_statement"

    public class try_block_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "try_block"
    // ObjectiveC2ansi.g:249:0: try_block : try_statement catch_statement ( finally_statement )? ;
    public ObjectiveC2ansiParser.try_block_return try_block() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.try_block_return retval = new ObjectiveC2ansiParser.try_block_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        ObjectiveC2ansiParser.try_statement_return try_statement214 = null;

        ObjectiveC2ansiParser.catch_statement_return catch_statement215 = null;

        ObjectiveC2ansiParser.finally_statement_return finally_statement216 = null;



        try 
    	{
            // ObjectiveC2ansi.g:250:2: ( try_statement catch_statement ( finally_statement )? )
            // ObjectiveC2ansi.g:250:2: try_statement catch_statement ( finally_statement )?
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_try_statement_in_try_block1189);
            	try_statement214 = try_statement();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, try_statement214.Tree);
            	PushFollow(FOLLOW_catch_statement_in_try_block1192);
            	catch_statement215 = catch_statement();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, catch_statement215.Tree);
            	// ObjectiveC2ansi.g:252:2: ( finally_statement )?
            	int alt48 = 2;
            	int LA48_0 = input.LA(1);

            	if ( (LA48_0 == 58) )
            	{
            	    alt48 = 1;
            	}
            	switch (alt48) 
            	{
            	    case 1 :
            	        // ObjectiveC2ansi.g:252:4: finally_statement
            	        {

            	        	PushFollow(FOLLOW_finally_statement_in_try_block1197);
            	        	finally_statement216 = finally_statement();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, finally_statement216.Tree);

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "try_block"

    public class synchronized_statement_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "synchronized_statement"
    // ObjectiveC2ansi.g:254:0: synchronized_statement : '@synchronized' '(' IDENTIFIER ')' statement ;
    public ObjectiveC2ansiParser.synchronized_statement_return synchronized_statement() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.synchronized_statement_return retval = new ObjectiveC2ansiParser.synchronized_statement_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal217 = null;
        IToken char_literal218 = null;
        IToken IDENTIFIER219 = null;
        IToken char_literal220 = null;
        ObjectiveC2ansiParser.statement_return statement221 = null;


        object string_literal217_tree=null;
        object char_literal218_tree=null;
        object IDENTIFIER219_tree=null;
        object char_literal220_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:255:2: ( '@synchronized' '(' IDENTIFIER ')' statement )
            // ObjectiveC2ansi.g:255:2: '@synchronized' '(' IDENTIFIER ')' statement
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal217=(IToken)Match(input,68,FOLLOW_68_in_synchronized_statement1208); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal217_tree = (object)adaptor.Create(string_literal217);
            		adaptor.AddChild(root_0, string_literal217_tree);
            	}
            	char_literal218=(IToken)Match(input,40,FOLLOW_40_in_synchronized_statement1210); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal218_tree = (object)adaptor.Create(char_literal218);
            		adaptor.AddChild(root_0, char_literal218_tree);
            	}
            	IDENTIFIER219=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_synchronized_statement1212); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{IDENTIFIER219_tree = (object)adaptor.Create(IDENTIFIER219);
            		adaptor.AddChild(root_0, IDENTIFIER219_tree);
            	}
            	char_literal220=(IToken)Match(input,41,FOLLOW_41_in_synchronized_statement1214); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal220_tree = (object)adaptor.Create(char_literal220);
            		adaptor.AddChild(root_0, char_literal220_tree);
            	}
            	PushFollow(FOLLOW_statement_in_synchronized_statement1216);
            	statement221 = statement();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, statement221.Tree);

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "synchronized_statement"

    public class property_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "property"
    // ObjectiveC2ansi.g:257:0: property : '@property' '(' ( atomicity | memory_managmenet | access )* ')' struct_declaration ;
    public ObjectiveC2ansiParser.property_return property() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.property_return retval = new ObjectiveC2ansiParser.property_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal222 = null;
        IToken char_literal223 = null;
        IToken char_literal227 = null;
        ObjectiveC2ansiParser.atomicity_return atomicity224 = null;

        ObjectiveC2ansiParser.memory_managmenet_return memory_managmenet225 = null;

        ObjectiveC2ansiParser.access_return access226 = null;

        ObjectiveC2ansiParser.struct_declaration_return struct_declaration228 = null;


        object string_literal222_tree=null;
        object char_literal223_tree=null;
        object char_literal227_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:258:4: ( '@property' '(' ( atomicity | memory_managmenet | access )* ')' struct_declaration )
            // ObjectiveC2ansi.g:258:4: '@property' '(' ( atomicity | memory_managmenet | access )* ')' struct_declaration
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal222=(IToken)Match(input,63,FOLLOW_63_in_property1226); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal222_tree = (object)adaptor.Create(string_literal222);
            		adaptor.AddChild(root_0, string_literal222_tree);
            	}
            	char_literal223=(IToken)Match(input,40,FOLLOW_40_in_property1228); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal223_tree = (object)adaptor.Create(char_literal223);
            		adaptor.AddChild(root_0, char_literal223_tree);
            	}
            	// ObjectiveC2ansi.g:258:20: ( atomicity | memory_managmenet | access )*
            	do 
            	{
            	    int alt49 = 4;
            	    switch ( input.LA(1) ) 
            	    {
            	    case 99:
            	    case 124:
            	    	{
            	        alt49 = 1;
            	        }
            	        break;
            	    case 98:
            	    case 108:
            	    case 130:
            	    	{
            	        alt49 = 2;
            	        }
            	        break;
            	    case 127:
            	    case 128:
            	    	{
            	        alt49 = 3;
            	        }
            	        break;

            	    }

            	    switch (alt49) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:258:21: atomicity
            			    {

            			    	PushFollow(FOLLOW_atomicity_in_property1231);
            			    	atomicity224 = atomicity();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, atomicity224.Tree);

            			    }
            			    break;
            			case 2 :
            			    // ObjectiveC2ansi.g:258:31: memory_managmenet
            			    {

            			    	PushFollow(FOLLOW_memory_managmenet_in_property1233);
            			    	memory_managmenet225 = memory_managmenet();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, memory_managmenet225.Tree);

            			    }
            			    break;
            			case 3 :
            			    // ObjectiveC2ansi.g:258:49: access
            			    {

            			    	PushFollow(FOLLOW_access_in_property1235);
            			    	access226 = access();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, access226.Tree);

            			    }
            			    break;

            			default:
            			    goto loop49;
            	    }
            	} while (true);

            	loop49:
            		;	// Stops C# compiler whining that label 'loop49' has no statements

            	char_literal227=(IToken)Match(input,41,FOLLOW_41_in_property1239); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal227_tree = (object)adaptor.Create(char_literal227);
            		adaptor.AddChild(root_0, char_literal227_tree);
            	}
            	PushFollow(FOLLOW_struct_declaration_in_property1241);
            	struct_declaration228 = struct_declaration();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, struct_declaration228.Tree);

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "property"

    public class atomicity_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "atomicity"
    // ObjectiveC2ansi.g:260:0: atomicity : ( 'atomic' | 'nonatomic' );
    public ObjectiveC2ansiParser.atomicity_return atomicity() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.atomicity_return retval = new ObjectiveC2ansiParser.atomicity_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken set229 = null;

        object set229_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:261:3: ( 'atomic' | 'nonatomic' )
            // ObjectiveC2ansi.g:
            {
            	root_0 = (object)adaptor.GetNilNode();

            	set229 = (IToken)input.LT(1);
            	if ( input.LA(1) == 99 || input.LA(1) == 124 ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set229));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "atomicity"

    public class memory_managmenet_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "memory_managmenet"
    // ObjectiveC2ansi.g:263:0: memory_managmenet : ( 'assign' | 'copy' | 'retain' );
    public ObjectiveC2ansiParser.memory_managmenet_return memory_managmenet() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.memory_managmenet_return retval = new ObjectiveC2ansiParser.memory_managmenet_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken set230 = null;

        object set230_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:264:4: ( 'assign' | 'copy' | 'retain' )
            // ObjectiveC2ansi.g:
            {
            	root_0 = (object)adaptor.GetNilNode();

            	set230 = (IToken)input.LT(1);
            	if ( input.LA(1) == 98 || input.LA(1) == 108 || input.LA(1) == 130 ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set230));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "memory_managmenet"

    public class access_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "access"
    // ObjectiveC2ansi.g:266:0: access : ( 'readonly' | 'readwrite' );
    public ObjectiveC2ansiParser.access_return access() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.access_return retval = new ObjectiveC2ansiParser.access_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken set231 = null;

        object set231_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:266:10: ( 'readonly' | 'readwrite' )
            // ObjectiveC2ansi.g:
            {
            	root_0 = (object)adaptor.GetNilNode();

            	set231 = (IToken)input.LT(1);
            	if ( (input.LA(1) >= 127 && input.LA(1) <= 128) ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set231));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "access"

    public class function_definition_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "function_definition"
    // ObjectiveC2ansi.g:268:0: function_definition : declaration_specifiers declarator compound_statement ;
    public ObjectiveC2ansiParser.function_definition_return function_definition() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.function_definition_return retval = new ObjectiveC2ansiParser.function_definition_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        ObjectiveC2ansiParser.declaration_specifiers_return declaration_specifiers232 = null;

        ObjectiveC2ansiParser.declarator_return declarator233 = null;

        ObjectiveC2ansiParser.compound_statement_return compound_statement234 = null;



        try 
    	{
            // ObjectiveC2ansi.g:268:23: ( declaration_specifiers declarator compound_statement )
            // ObjectiveC2ansi.g:268:23: declaration_specifiers declarator compound_statement
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_declaration_specifiers_in_function_definition1283);
            	declaration_specifiers232 = declaration_specifiers();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, declaration_specifiers232.Tree);
            	PushFollow(FOLLOW_declarator_in_function_definition1285);
            	declarator233 = declarator();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, declarator233.Tree);
            	PushFollow(FOLLOW_compound_statement_in_function_definition1287);
            	compound_statement234 = compound_statement();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, compound_statement234.Tree);

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "function_definition"

    public class declaration_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "declaration"
    // ObjectiveC2ansi.g:270:0: declaration : declaration_specifiers ( init_declarator_list )? ';' ;
    public ObjectiveC2ansiParser.declaration_return declaration() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.declaration_return retval = new ObjectiveC2ansiParser.declaration_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal237 = null;
        ObjectiveC2ansiParser.declaration_specifiers_return declaration_specifiers235 = null;

        ObjectiveC2ansiParser.init_declarator_list_return init_declarator_list236 = null;


        object char_literal237_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:270:15: ( declaration_specifiers ( init_declarator_list )? ';' )
            // ObjectiveC2ansi.g:270:15: declaration_specifiers ( init_declarator_list )? ';'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_declaration_specifiers_in_declaration1296);
            	declaration_specifiers235 = declaration_specifiers();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, declaration_specifiers235.Tree);
            	// ObjectiveC2ansi.g:270:38: ( init_declarator_list )?
            	int alt50 = 2;
            	int LA50_0 = input.LA(1);

            	if ( (LA50_0 == IDENTIFIER || LA50_0 == 40 || LA50_0 == 42) )
            	{
            	    alt50 = 1;
            	}
            	switch (alt50) 
            	{
            	    case 1 :
            	        // ObjectiveC2ansi.g:0:0: init_declarator_list
            	        {

            	        	PushFollow(FOLLOW_init_declarator_list_in_declaration1298);
            	        	init_declarator_list236 = init_declarator_list();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, init_declarator_list236.Tree);

            	        }
            	        break;

            	}

            	char_literal237=(IToken)Match(input,51,FOLLOW_51_in_declaration1301); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal237_tree = (object)adaptor.Create(char_literal237);
            		adaptor.AddChild(root_0, char_literal237_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "declaration"

    public class declaration_specifiers_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "declaration_specifiers"
    // ObjectiveC2ansi.g:272:0: declaration_specifiers : ( storage_class_specifier | type_specifier | type_qualifier )+ ;
    public ObjectiveC2ansiParser.declaration_specifiers_return declaration_specifiers() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.declaration_specifiers_return retval = new ObjectiveC2ansiParser.declaration_specifiers_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        ObjectiveC2ansiParser.storage_class_specifier_return storage_class_specifier238 = null;

        ObjectiveC2ansiParser.type_specifier_return type_specifier239 = null;

        ObjectiveC2ansiParser.type_qualifier_return type_qualifier240 = null;



        try 
    	{
            // ObjectiveC2ansi.g:273:5: ( ( storage_class_specifier | type_specifier | type_qualifier )+ )
            // ObjectiveC2ansi.g:273:5: ( storage_class_specifier | type_specifier | type_qualifier )+
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:273:5: ( storage_class_specifier | type_specifier | type_qualifier )+
            	int cnt51 = 0;
            	do 
            	{
            	    int alt51 = 4;
            	    switch ( input.LA(1) ) 
            	    {
            	    case IDENTIFIER:
            	    	{
            	        int LA51_2 = input.LA(2);

            	        if ( (synpred114_ObjectiveC2ansi()) )
            	        {
            	            alt51 = 2;
            	        }


            	        }
            	        break;
            	    case 100:
            	    case 114:
            	    case 129:
            	    case 136:
            	    case 140:
            	    	{
            	        alt51 = 1;
            	        }
            	        break;
            	    case 105:
            	    case 111:
            	    case 113:
            	    case 115:
            	    case 118:
            	    case 122:
            	    case 123:
            	    case 133:
            	    case 134:
            	    case 137:
            	    case 141:
            	    case 142:
            	    case 143:
            	    	{
            	        alt51 = 2;
            	        }
            	        break;
            	    case 102:
            	    case 103:
            	    case 106:
            	    case 120:
            	    case 121:
            	    case 125:
            	    case 126:
            	    case 144:
            	    	{
            	        alt51 = 3;
            	        }
            	        break;

            	    }

            	    switch (alt51) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:273:6: storage_class_specifier
            			    {

            			    	PushFollow(FOLLOW_storage_class_specifier_in_declaration_specifiers1313);
            			    	storage_class_specifier238 = storage_class_specifier();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, storage_class_specifier238.Tree);

            			    }
            			    break;
            			case 2 :
            			    // ObjectiveC2ansi.g:273:32: type_specifier
            			    {

            			    	PushFollow(FOLLOW_type_specifier_in_declaration_specifiers1317);
            			    	type_specifier239 = type_specifier();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, type_specifier239.Tree);

            			    }
            			    break;
            			case 3 :
            			    // ObjectiveC2ansi.g:273:49: type_qualifier
            			    {

            			    	PushFollow(FOLLOW_type_qualifier_in_declaration_specifiers1321);
            			    	type_qualifier240 = type_qualifier();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, type_qualifier240.Tree);

            			    }
            			    break;

            			default:
            			    if ( cnt51 >= 1 ) goto loop51;
            			    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            		            EarlyExitException eee51 =
            		                new EarlyExitException(51, input);
            		            throw eee51;
            	    }
            	    cnt51++;
            	} while (true);

            	loop51:
            		;	// Stops C# compiler whining that label 'loop51' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "declaration_specifiers"

    public class storage_class_specifier_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "storage_class_specifier"
    // ObjectiveC2ansi.g:275:0: storage_class_specifier : ( 'auto' | 'register' | 'static' | 'extern' | 'typedef' );
    public ObjectiveC2ansiParser.storage_class_specifier_return storage_class_specifier() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.storage_class_specifier_return retval = new ObjectiveC2ansiParser.storage_class_specifier_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken set241 = null;

        object set241_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:275:26: ( 'auto' | 'register' | 'static' | 'extern' | 'typedef' )
            // ObjectiveC2ansi.g:
            {
            	root_0 = (object)adaptor.GetNilNode();

            	set241 = (IToken)input.LT(1);
            	if ( input.LA(1) == 100 || input.LA(1) == 114 || input.LA(1) == 129 || input.LA(1) == 136 || input.LA(1) == 140 ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set241));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "storage_class_specifier"

    public class init_declarator_list_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "init_declarator_list"
    // ObjectiveC2ansi.g:277:0: init_declarator_list : init_declarator ( ',' init_declarator )* ;
    public ObjectiveC2ansiParser.init_declarator_list_return init_declarator_list() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.init_declarator_list_return retval = new ObjectiveC2ansiParser.init_declarator_list_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal243 = null;
        ObjectiveC2ansiParser.init_declarator_return init_declarator242 = null;

        ObjectiveC2ansiParser.init_declarator_return init_declarator244 = null;


        object char_literal243_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:277:24: ( init_declarator ( ',' init_declarator )* )
            // ObjectiveC2ansi.g:277:24: init_declarator ( ',' init_declarator )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_init_declarator_in_init_declarator_list1355);
            	init_declarator242 = init_declarator();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, init_declarator242.Tree);
            	// ObjectiveC2ansi.g:277:40: ( ',' init_declarator )*
            	do 
            	{
            	    int alt52 = 2;
            	    int LA52_0 = input.LA(1);

            	    if ( (LA52_0 == 44) )
            	    {
            	        alt52 = 1;
            	    }


            	    switch (alt52) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:277:41: ',' init_declarator
            			    {

            			    	char_literal243=(IToken)Match(input,44,FOLLOW_44_in_init_declarator_list1358); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal243_tree = (object)adaptor.Create(char_literal243);
            			    		adaptor.AddChild(root_0, char_literal243_tree);
            			    	}
            			    	PushFollow(FOLLOW_init_declarator_in_init_declarator_list1360);
            			    	init_declarator244 = init_declarator();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, init_declarator244.Tree);

            			    }
            			    break;

            			default:
            			    goto loop52;
            	    }
            	} while (true);

            	loop52:
            		;	// Stops C# compiler whining that label 'loop52' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "init_declarator_list"

    public class init_declarator_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "init_declarator"
    // ObjectiveC2ansi.g:278:0: init_declarator : declarator ( '=' initializer )? ;
    public ObjectiveC2ansiParser.init_declarator_return init_declarator() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.init_declarator_return retval = new ObjectiveC2ansiParser.init_declarator_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal246 = null;
        ObjectiveC2ansiParser.declarator_return declarator245 = null;

        ObjectiveC2ansiParser.initializer_return initializer247 = null;


        object char_literal246_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:278:19: ( declarator ( '=' initializer )? )
            // ObjectiveC2ansi.g:278:19: declarator ( '=' initializer )?
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_declarator_in_init_declarator1370);
            	declarator245 = declarator();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, declarator245.Tree);
            	// ObjectiveC2ansi.g:278:30: ( '=' initializer )?
            	int alt53 = 2;
            	int LA53_0 = input.LA(1);

            	if ( (LA53_0 == 90) )
            	{
            	    alt53 = 1;
            	}
            	switch (alt53) 
            	{
            	    case 1 :
            	        // ObjectiveC2ansi.g:278:31: '=' initializer
            	        {

            	        	char_literal246=(IToken)Match(input,90,FOLLOW_90_in_init_declarator1373); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{char_literal246_tree = (object)adaptor.Create(char_literal246);
            	        		adaptor.AddChild(root_0, char_literal246_tree);
            	        	}
            	        	PushFollow(FOLLOW_initializer_in_init_declarator1375);
            	        	initializer247 = initializer();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, initializer247.Tree);

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "init_declarator"

    public class struct_or_union_specifier_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "struct_or_union_specifier"
    // ObjectiveC2ansi.g:280:0: struct_or_union_specifier : ( 'struct' | 'union' ) ( IDENTIFIER | ( IDENTIFIER )? '{' ( struct_declaration )+ '}' ) ;
    public ObjectiveC2ansiParser.struct_or_union_specifier_return struct_or_union_specifier() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.struct_or_union_specifier_return retval = new ObjectiveC2ansiParser.struct_or_union_specifier_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken set248 = null;
        IToken IDENTIFIER249 = null;
        IToken IDENTIFIER250 = null;
        IToken char_literal251 = null;
        IToken char_literal253 = null;
        ObjectiveC2ansiParser.struct_declaration_return struct_declaration252 = null;


        object set248_tree=null;
        object IDENTIFIER249_tree=null;
        object IDENTIFIER250_tree=null;
        object char_literal251_tree=null;
        object char_literal253_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:280:28: ( ( 'struct' | 'union' ) ( IDENTIFIER | ( IDENTIFIER )? '{' ( struct_declaration )+ '}' ) )
            // ObjectiveC2ansi.g:280:28: ( 'struct' | 'union' ) ( IDENTIFIER | ( IDENTIFIER )? '{' ( struct_declaration )+ '}' )
            {
            	root_0 = (object)adaptor.GetNilNode();

            	set248 = (IToken)input.LT(1);
            	if ( input.LA(1) == 137 || input.LA(1) == 141 ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set248));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}

            	// ObjectiveC2ansi.g:281:3: ( IDENTIFIER | ( IDENTIFIER )? '{' ( struct_declaration )+ '}' )
            	int alt56 = 2;
            	int LA56_0 = input.LA(1);

            	if ( (LA56_0 == IDENTIFIER) )
            	{
            	    int LA56_1 = input.LA(2);

            	    if ( (synpred123_ObjectiveC2ansi()) )
            	    {
            	        alt56 = 1;
            	    }
            	    else if ( (true) )
            	    {
            	        alt56 = 2;
            	    }
            	    else 
            	    {
            	        if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	        NoViableAltException nvae_d56s1 =
            	            new NoViableAltException("", 56, 1, input);

            	        throw nvae_d56s1;
            	    }
            	}
            	else if ( (LA56_0 == 77) )
            	{
            	    alt56 = 2;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d56s0 =
            	        new NoViableAltException("", 56, 0, input);

            	    throw nvae_d56s0;
            	}
            	switch (alt56) 
            	{
            	    case 1 :
            	        // ObjectiveC2ansi.g:281:5: IDENTIFIER
            	        {

            	        	IDENTIFIER249=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_struct_or_union_specifier1398); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{IDENTIFIER249_tree = (object)adaptor.Create(IDENTIFIER249);
            	        		adaptor.AddChild(root_0, IDENTIFIER249_tree);
            	        	}

            	        }
            	        break;
            	    case 2 :
            	        // ObjectiveC2ansi.g:281:18: ( IDENTIFIER )? '{' ( struct_declaration )+ '}'
            	        {
            	        	// ObjectiveC2ansi.g:281:18: ( IDENTIFIER )?
            	        	int alt54 = 2;
            	        	int LA54_0 = input.LA(1);

            	        	if ( (LA54_0 == IDENTIFIER) )
            	        	{
            	        	    alt54 = 1;
            	        	}
            	        	switch (alt54) 
            	        	{
            	        	    case 1 :
            	        	        // ObjectiveC2ansi.g:0:0: IDENTIFIER
            	        	        {

            	        	        	IDENTIFIER250=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_struct_or_union_specifier1402); if (state.failed) return retval;
            	        	        	if ( state.backtracking == 0 )
            	        	        	{IDENTIFIER250_tree = (object)adaptor.Create(IDENTIFIER250);
            	        	        		adaptor.AddChild(root_0, IDENTIFIER250_tree);
            	        	        	}

            	        	        }
            	        	        break;

            	        	}

            	        	char_literal251=(IToken)Match(input,77,FOLLOW_77_in_struct_or_union_specifier1405); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{char_literal251_tree = (object)adaptor.Create(char_literal251);
            	        		adaptor.AddChild(root_0, char_literal251_tree);
            	        	}
            	        	// ObjectiveC2ansi.g:281:34: ( struct_declaration )+
            	        	int cnt55 = 0;
            	        	do 
            	        	{
            	        	    int alt55 = 2;
            	        	    int LA55_0 = input.LA(1);

            	        	    if ( (LA55_0 == IDENTIFIER || (LA55_0 >= 102 && LA55_0 <= 103) || (LA55_0 >= 105 && LA55_0 <= 106) || LA55_0 == 111 || LA55_0 == 113 || LA55_0 == 115 || LA55_0 == 118 || (LA55_0 >= 120 && LA55_0 <= 123) || (LA55_0 >= 125 && LA55_0 <= 126) || (LA55_0 >= 133 && LA55_0 <= 134) || LA55_0 == 137 || (LA55_0 >= 141 && LA55_0 <= 144)) )
            	        	    {
            	        	        alt55 = 1;
            	        	    }


            	        	    switch (alt55) 
            	        		{
            	        			case 1 :
            	        			    // ObjectiveC2ansi.g:0:0: struct_declaration
            	        			    {

            	        			    	PushFollow(FOLLOW_struct_declaration_in_struct_or_union_specifier1407);
            	        			    	struct_declaration252 = struct_declaration();
            	        			    	state.followingStackPointer--;
            	        			    	if (state.failed) return retval;
            	        			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, struct_declaration252.Tree);

            	        			    }
            	        			    break;

            	        			default:
            	        			    if ( cnt55 >= 1 ) goto loop55;
            	        			    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	        		            EarlyExitException eee55 =
            	        		                new EarlyExitException(55, input);
            	        		            throw eee55;
            	        	    }
            	        	    cnt55++;
            	        	} while (true);

            	        	loop55:
            	        		;	// Stops C# compiler whining that label 'loop55' has no statements

            	        	char_literal253=(IToken)Match(input,81,FOLLOW_81_in_struct_or_union_specifier1410); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{char_literal253_tree = (object)adaptor.Create(char_literal253);
            	        		adaptor.AddChild(root_0, char_literal253_tree);
            	        	}

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "struct_or_union_specifier"

    public class struct_declarator_list_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "struct_declarator_list"
    // ObjectiveC2ansi.g:283:0: struct_declarator_list : ( struct_declarator ) ( ',' struct_declarator )* ;
    public ObjectiveC2ansiParser.struct_declarator_list_return struct_declarator_list() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.struct_declarator_list_return retval = new ObjectiveC2ansiParser.struct_declarator_list_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal255 = null;
        ObjectiveC2ansiParser.struct_declarator_return struct_declarator254 = null;

        ObjectiveC2ansiParser.struct_declarator_return struct_declarator256 = null;


        object char_literal255_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:283:25: ( ( struct_declarator ) ( ',' struct_declarator )* )
            // ObjectiveC2ansi.g:283:25: ( struct_declarator ) ( ',' struct_declarator )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:283:25: ( struct_declarator )
            	// ObjectiveC2ansi.g:283:26: struct_declarator
            	{
            		PushFollow(FOLLOW_struct_declarator_in_struct_declarator_list1420);
            		struct_declarator254 = struct_declarator();
            		state.followingStackPointer--;
            		if (state.failed) return retval;
            		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, struct_declarator254.Tree);

            	}

            	// ObjectiveC2ansi.g:283:45: ( ',' struct_declarator )*
            	do 
            	{
            	    int alt57 = 2;
            	    int LA57_0 = input.LA(1);

            	    if ( (LA57_0 == 44) )
            	    {
            	        alt57 = 1;
            	    }


            	    switch (alt57) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:283:46: ',' struct_declarator
            			    {

            			    	char_literal255=(IToken)Match(input,44,FOLLOW_44_in_struct_declarator_list1424); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal255_tree = (object)adaptor.Create(char_literal255);
            			    		adaptor.AddChild(root_0, char_literal255_tree);
            			    	}
            			    	PushFollow(FOLLOW_struct_declarator_in_struct_declarator_list1426);
            			    	struct_declarator256 = struct_declarator();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, struct_declarator256.Tree);

            			    }
            			    break;

            			default:
            			    goto loop57;
            	    }
            	} while (true);

            	loop57:
            		;	// Stops C# compiler whining that label 'loop57' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "struct_declarator_list"

    public class struct_declaration_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "struct_declaration"
    // ObjectiveC2ansi.g:285:0: struct_declaration : specifier_qualifier_list struct_declarator_list ';' ;
    public ObjectiveC2ansiParser.struct_declaration_return struct_declaration() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.struct_declaration_return retval = new ObjectiveC2ansiParser.struct_declaration_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal259 = null;
        ObjectiveC2ansiParser.specifier_qualifier_list_return specifier_qualifier_list257 = null;

        ObjectiveC2ansiParser.struct_declarator_list_return struct_declarator_list258 = null;


        object char_literal259_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:285:22: ( specifier_qualifier_list struct_declarator_list ';' )
            // ObjectiveC2ansi.g:285:22: specifier_qualifier_list struct_declarator_list ';'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_specifier_qualifier_list_in_struct_declaration1436);
            	specifier_qualifier_list257 = specifier_qualifier_list();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, specifier_qualifier_list257.Tree);
            	PushFollow(FOLLOW_struct_declarator_list_in_struct_declaration1438);
            	struct_declarator_list258 = struct_declarator_list();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, struct_declarator_list258.Tree);
            	char_literal259=(IToken)Match(input,51,FOLLOW_51_in_struct_declaration1440); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal259_tree = (object)adaptor.Create(char_literal259);
            		adaptor.AddChild(root_0, char_literal259_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "struct_declaration"

    public class specifier_qualifier_list_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "specifier_qualifier_list"
    // ObjectiveC2ansi.g:287:0: specifier_qualifier_list : ( type_specifier | type_qualifier ) ( specifier_qualifier_list )? ;
    public ObjectiveC2ansiParser.specifier_qualifier_list_return specifier_qualifier_list() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.specifier_qualifier_list_return retval = new ObjectiveC2ansiParser.specifier_qualifier_list_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        ObjectiveC2ansiParser.type_specifier_return type_specifier260 = null;

        ObjectiveC2ansiParser.type_qualifier_return type_qualifier261 = null;

        ObjectiveC2ansiParser.specifier_qualifier_list_return specifier_qualifier_list262 = null;



        try 
    	{
            // ObjectiveC2ansi.g:288:11: ( ( type_specifier | type_qualifier ) ( specifier_qualifier_list )? )
            // ObjectiveC2ansi.g:288:11: ( type_specifier | type_qualifier ) ( specifier_qualifier_list )?
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:288:11: ( type_specifier | type_qualifier )
            	int alt58 = 2;
            	int LA58_0 = input.LA(1);

            	if ( (LA58_0 == IDENTIFIER || LA58_0 == 105 || LA58_0 == 111 || LA58_0 == 113 || LA58_0 == 115 || LA58_0 == 118 || (LA58_0 >= 122 && LA58_0 <= 123) || (LA58_0 >= 133 && LA58_0 <= 134) || LA58_0 == 137 || (LA58_0 >= 141 && LA58_0 <= 143)) )
            	{
            	    alt58 = 1;
            	}
            	else if ( ((LA58_0 >= 102 && LA58_0 <= 103) || LA58_0 == 106 || (LA58_0 >= 120 && LA58_0 <= 121) || (LA58_0 >= 125 && LA58_0 <= 126) || LA58_0 == 144) )
            	{
            	    alt58 = 2;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d58s0 =
            	        new NoViableAltException("", 58, 0, input);

            	    throw nvae_d58s0;
            	}
            	switch (alt58) 
            	{
            	    case 1 :
            	        // ObjectiveC2ansi.g:288:12: type_specifier
            	        {

            	        	PushFollow(FOLLOW_type_specifier_in_specifier_qualifier_list1459);
            	        	type_specifier260 = type_specifier();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, type_specifier260.Tree);

            	        }
            	        break;
            	    case 2 :
            	        // ObjectiveC2ansi.g:288:29: type_qualifier
            	        {
            	        	PushFollow(FOLLOW_type_qualifier_in_specifier_qualifier_list1463);
            	        	type_qualifier261 = type_qualifier();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, type_qualifier261.Tree);

            	        }
            	        break;

            	}

            	// ObjectiveC2ansi.g:288:45: ( specifier_qualifier_list )?
            	int alt59 = 2;
            	alt59 = dfa59.Predict(input);
            	switch (alt59) 
            	{
            	    case 1 :
            	        // ObjectiveC2ansi.g:0:0: specifier_qualifier_list
            	        {

            	        	PushFollow(FOLLOW_specifier_qualifier_list_in_specifier_qualifier_list1466);
            	        	specifier_qualifier_list262 = specifier_qualifier_list();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, specifier_qualifier_list262.Tree);

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "specifier_qualifier_list"

    public class struct_declarator_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "struct_declarator"
    // ObjectiveC2ansi.g:292:0: struct_declarator : ( declarator | ':' constant_expression | declarator ':' constant_expression );
    public ObjectiveC2ansiParser.struct_declarator_return struct_declarator() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.struct_declarator_return retval = new ObjectiveC2ansiParser.struct_declarator_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal264 = null;
        IToken char_literal267 = null;
        ObjectiveC2ansiParser.declarator_return declarator263 = null;

        ObjectiveC2ansiParser.constant_expression_return constant_expression265 = null;

        ObjectiveC2ansiParser.declarator_return declarator266 = null;

        ObjectiveC2ansiParser.constant_expression_return constant_expression268 = null;


        object char_literal264_tree=null;
        object char_literal267_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:293:4: ( declarator | ':' constant_expression | declarator ':' constant_expression )
            int alt60 = 3;
            switch ( input.LA(1) ) 
            {
            case 42:
            	{
                int LA60_1 = input.LA(2);

                if ( (synpred129_ObjectiveC2ansi()) )
                {
                    alt60 = 1;
                }
                else if ( (true) )
                {
                    alt60 = 3;
                }
                else 
                {
                    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    NoViableAltException nvae_d60s1 =
                        new NoViableAltException("", 60, 1, input);

                    throw nvae_d60s1;
                }
                }
                break;
            case IDENTIFIER:
            	{
                int LA60_2 = input.LA(2);

                if ( (synpred129_ObjectiveC2ansi()) )
                {
                    alt60 = 1;
                }
                else if ( (true) )
                {
                    alt60 = 3;
                }
                else 
                {
                    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    NoViableAltException nvae_d60s2 =
                        new NoViableAltException("", 60, 2, input);

                    throw nvae_d60s2;
                }
                }
                break;
            case 40:
            	{
                int LA60_3 = input.LA(2);

                if ( (synpred129_ObjectiveC2ansi()) )
                {
                    alt60 = 1;
                }
                else if ( (true) )
                {
                    alt60 = 3;
                }
                else 
                {
                    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    NoViableAltException nvae_d60s3 =
                        new NoViableAltException("", 60, 3, input);

                    throw nvae_d60s3;
                }
                }
                break;
            case 50:
            	{
                alt60 = 2;
                }
                break;
            	default:
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d60s0 =
            	        new NoViableAltException("", 60, 0, input);

            	    throw nvae_d60s0;
            }

            switch (alt60) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:293:4: declarator
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_declarator_in_struct_declarator1486);
                    	declarator263 = declarator();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, declarator263.Tree);

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:294:11: ':' constant_expression
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	char_literal264=(IToken)Match(input,50,FOLLOW_50_in_struct_declarator1498); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal264_tree = (object)adaptor.Create(char_literal264);
                    		adaptor.AddChild(root_0, char_literal264_tree);
                    	}
                    	PushFollow(FOLLOW_constant_expression_in_struct_declarator1500);
                    	constant_expression265 = constant_expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, constant_expression265.Tree);

                    }
                    break;
                case 3 :
                    // ObjectiveC2ansi.g:295:11: declarator ':' constant_expression
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_declarator_in_struct_declarator1512);
                    	declarator266 = declarator();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, declarator266.Tree);
                    	char_literal267=(IToken)Match(input,50,FOLLOW_50_in_struct_declarator1514); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal267_tree = (object)adaptor.Create(char_literal267);
                    		adaptor.AddChild(root_0, char_literal267_tree);
                    	}
                    	PushFollow(FOLLOW_constant_expression_in_struct_declarator1516);
                    	constant_expression268 = constant_expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, constant_expression268.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "struct_declarator"

    public class enum_specifier_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "enum_specifier"
    // ObjectiveC2ansi.g:298:0: enum_specifier : 'enum' ( identifier ( '{' enumerator_list '}' )? | '{' enumerator_list '}' ) ;
    public ObjectiveC2ansiParser.enum_specifier_return enum_specifier() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.enum_specifier_return retval = new ObjectiveC2ansiParser.enum_specifier_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal269 = null;
        IToken char_literal271 = null;
        IToken char_literal273 = null;
        IToken char_literal274 = null;
        IToken char_literal276 = null;
        ObjectiveC2ansiParser.identifier_return identifier270 = null;

        ObjectiveC2ansiParser.enumerator_list_return enumerator_list272 = null;

        ObjectiveC2ansiParser.enumerator_list_return enumerator_list275 = null;


        object string_literal269_tree=null;
        object char_literal271_tree=null;
        object char_literal273_tree=null;
        object char_literal274_tree=null;
        object char_literal276_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:298:18: ( 'enum' ( identifier ( '{' enumerator_list '}' )? | '{' enumerator_list '}' ) )
            // ObjectiveC2ansi.g:298:18: 'enum' ( identifier ( '{' enumerator_list '}' )? | '{' enumerator_list '}' )
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal269=(IToken)Match(input,113,FOLLOW_113_in_enum_specifier1533); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal269_tree = (object)adaptor.Create(string_literal269);
            		adaptor.AddChild(root_0, string_literal269_tree);
            	}
            	// ObjectiveC2ansi.g:299:3: ( identifier ( '{' enumerator_list '}' )? | '{' enumerator_list '}' )
            	int alt62 = 2;
            	int LA62_0 = input.LA(1);

            	if ( (LA62_0 == IDENTIFIER) )
            	{
            	    alt62 = 1;
            	}
            	else if ( (LA62_0 == 77) )
            	{
            	    alt62 = 2;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d62s0 =
            	        new NoViableAltException("", 62, 0, input);

            	    throw nvae_d62s0;
            	}
            	switch (alt62) 
            	{
            	    case 1 :
            	        // ObjectiveC2ansi.g:299:5: identifier ( '{' enumerator_list '}' )?
            	        {

            	        	PushFollow(FOLLOW_identifier_in_enum_specifier1540);
            	        	identifier270 = identifier();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, identifier270.Tree);
            	        	// ObjectiveC2ansi.g:299:16: ( '{' enumerator_list '}' )?
            	        	int alt61 = 2;
            	        	alt61 = dfa61.Predict(input);
            	        	switch (alt61) 
            	        	{
            	        	    case 1 :
            	        	        // ObjectiveC2ansi.g:299:17: '{' enumerator_list '}'
            	        	        {

            	        	        	char_literal271=(IToken)Match(input,77,FOLLOW_77_in_enum_specifier1543); if (state.failed) return retval;
            	        	        	if ( state.backtracking == 0 )
            	        	        	{char_literal271_tree = (object)adaptor.Create(char_literal271);
            	        	        		adaptor.AddChild(root_0, char_literal271_tree);
            	        	        	}
            	        	        	PushFollow(FOLLOW_enumerator_list_in_enum_specifier1545);
            	        	        	enumerator_list272 = enumerator_list();
            	        	        	state.followingStackPointer--;
            	        	        	if (state.failed) return retval;
            	        	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, enumerator_list272.Tree);
            	        	        	char_literal273=(IToken)Match(input,81,FOLLOW_81_in_enum_specifier1547); if (state.failed) return retval;
            	        	        	if ( state.backtracking == 0 )
            	        	        	{char_literal273_tree = (object)adaptor.Create(char_literal273);
            	        	        		adaptor.AddChild(root_0, char_literal273_tree);
            	        	        	}

            	        	        }
            	        	        break;

            	        	}


            	        }
            	        break;
            	    case 2 :
            	        // ObjectiveC2ansi.g:300:5: '{' enumerator_list '}'
            	        {
            	        	char_literal274=(IToken)Match(input,77,FOLLOW_77_in_enum_specifier1556); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{char_literal274_tree = (object)adaptor.Create(char_literal274);
            	        		adaptor.AddChild(root_0, char_literal274_tree);
            	        	}
            	        	PushFollow(FOLLOW_enumerator_list_in_enum_specifier1558);
            	        	enumerator_list275 = enumerator_list();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, enumerator_list275.Tree);
            	        	char_literal276=(IToken)Match(input,81,FOLLOW_81_in_enum_specifier1560); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{char_literal276_tree = (object)adaptor.Create(char_literal276);
            	        		adaptor.AddChild(root_0, char_literal276_tree);
            	        	}

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "enum_specifier"

    public class enumerator_list_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "enumerator_list"
    // ObjectiveC2ansi.g:301:0: enumerator_list : enumerator ( ',' enumerator )* ;
    public ObjectiveC2ansiParser.enumerator_list_return enumerator_list() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.enumerator_list_return retval = new ObjectiveC2ansiParser.enumerator_list_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal278 = null;
        ObjectiveC2ansiParser.enumerator_return enumerator277 = null;

        ObjectiveC2ansiParser.enumerator_return enumerator279 = null;


        object char_literal278_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:301:19: ( enumerator ( ',' enumerator )* )
            // ObjectiveC2ansi.g:301:19: enumerator ( ',' enumerator )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_enumerator_in_enumerator_list1569);
            	enumerator277 = enumerator();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, enumerator277.Tree);
            	// ObjectiveC2ansi.g:301:30: ( ',' enumerator )*
            	do 
            	{
            	    int alt63 = 2;
            	    int LA63_0 = input.LA(1);

            	    if ( (LA63_0 == 44) )
            	    {
            	        alt63 = 1;
            	    }


            	    switch (alt63) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:301:31: ',' enumerator
            			    {

            			    	char_literal278=(IToken)Match(input,44,FOLLOW_44_in_enumerator_list1572); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal278_tree = (object)adaptor.Create(char_literal278);
            			    		adaptor.AddChild(root_0, char_literal278_tree);
            			    	}
            			    	PushFollow(FOLLOW_enumerator_in_enumerator_list1574);
            			    	enumerator279 = enumerator();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, enumerator279.Tree);

            			    }
            			    break;

            			default:
            			    goto loop63;
            	    }
            	} while (true);

            	loop63:
            		;	// Stops C# compiler whining that label 'loop63' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "enumerator_list"

    public class enumerator_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "enumerator"
    // ObjectiveC2ansi.g:302:0: enumerator : identifier ( '=' constant_expression )? ;
    public ObjectiveC2ansiParser.enumerator_return enumerator() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.enumerator_return retval = new ObjectiveC2ansiParser.enumerator_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal281 = null;
        ObjectiveC2ansiParser.identifier_return identifier280 = null;

        ObjectiveC2ansiParser.constant_expression_return constant_expression282 = null;


        object char_literal281_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:302:14: ( identifier ( '=' constant_expression )? )
            // ObjectiveC2ansi.g:302:14: identifier ( '=' constant_expression )?
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_identifier_in_enumerator1584);
            	identifier280 = identifier();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, identifier280.Tree);
            	// ObjectiveC2ansi.g:302:25: ( '=' constant_expression )?
            	int alt64 = 2;
            	int LA64_0 = input.LA(1);

            	if ( (LA64_0 == 90) )
            	{
            	    alt64 = 1;
            	}
            	switch (alt64) 
            	{
            	    case 1 :
            	        // ObjectiveC2ansi.g:302:26: '=' constant_expression
            	        {

            	        	char_literal281=(IToken)Match(input,90,FOLLOW_90_in_enumerator1587); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{char_literal281_tree = (object)adaptor.Create(char_literal281);
            	        		adaptor.AddChild(root_0, char_literal281_tree);
            	        	}
            	        	PushFollow(FOLLOW_constant_expression_in_enumerator1589);
            	        	constant_expression282 = constant_expression();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, constant_expression282.Tree);

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "enumerator"

    public class declarator_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "declarator"
    // ObjectiveC2ansi.g:304:0: declarator : ( pointer direct_declarator | direct_declarator );
    public ObjectiveC2ansiParser.declarator_return declarator() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.declarator_return retval = new ObjectiveC2ansiParser.declarator_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        ObjectiveC2ansiParser.pointer_return pointer283 = null;

        ObjectiveC2ansiParser.direct_declarator_return direct_declarator284 = null;

        ObjectiveC2ansiParser.direct_declarator_return direct_declarator285 = null;



        try 
    	{
            // ObjectiveC2ansi.g:305:11: ( pointer direct_declarator | direct_declarator )
            int alt65 = 2;
            int LA65_0 = input.LA(1);

            if ( (LA65_0 == 42) )
            {
                alt65 = 1;
            }
            else if ( (LA65_0 == IDENTIFIER || LA65_0 == 40) )
            {
                alt65 = 2;
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                NoViableAltException nvae_d65s0 =
                    new NoViableAltException("", 65, 0, input);

                throw nvae_d65s0;
            }
            switch (alt65) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:305:11: pointer direct_declarator
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_pointer_in_declarator1607);
                    	pointer283 = pointer();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, pointer283.Tree);
                    	PushFollow(FOLLOW_direct_declarator_in_declarator1609);
                    	direct_declarator284 = direct_declarator();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, direct_declarator284.Tree);

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:306:11: direct_declarator
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_direct_declarator_in_declarator1621);
                    	direct_declarator285 = direct_declarator();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, direct_declarator285.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "declarator"

    public class pointer_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "pointer"
    // ObjectiveC2ansi.g:309:0: pointer : ( '*' | '*' type_qualifier_list | '*' pointer | '*' type_qualifier_list pointer );
    public ObjectiveC2ansiParser.pointer_return pointer() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.pointer_return retval = new ObjectiveC2ansiParser.pointer_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal286 = null;
        IToken char_literal287 = null;
        IToken char_literal289 = null;
        IToken char_literal291 = null;
        ObjectiveC2ansiParser.type_qualifier_list_return type_qualifier_list288 = null;

        ObjectiveC2ansiParser.pointer_return pointer290 = null;

        ObjectiveC2ansiParser.type_qualifier_list_return type_qualifier_list292 = null;

        ObjectiveC2ansiParser.pointer_return pointer293 = null;


        object char_literal286_tree=null;
        object char_literal287_tree=null;
        object char_literal289_tree=null;
        object char_literal291_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:309:11: ( '*' | '*' type_qualifier_list | '*' pointer | '*' type_qualifier_list pointer )
            int alt66 = 4;
            alt66 = dfa66.Predict(input);
            switch (alt66) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:309:11: '*'
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	char_literal286=(IToken)Match(input,42,FOLLOW_42_in_pointer1638); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal286_tree = (object)adaptor.Create(char_literal286);
                    		adaptor.AddChild(root_0, char_literal286_tree);
                    	}

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:310:11: '*' type_qualifier_list
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	char_literal287=(IToken)Match(input,42,FOLLOW_42_in_pointer1650); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal287_tree = (object)adaptor.Create(char_literal287);
                    		adaptor.AddChild(root_0, char_literal287_tree);
                    	}
                    	PushFollow(FOLLOW_type_qualifier_list_in_pointer1652);
                    	type_qualifier_list288 = type_qualifier_list();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, type_qualifier_list288.Tree);

                    }
                    break;
                case 3 :
                    // ObjectiveC2ansi.g:311:11: '*' pointer
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	char_literal289=(IToken)Match(input,42,FOLLOW_42_in_pointer1664); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal289_tree = (object)adaptor.Create(char_literal289);
                    		adaptor.AddChild(root_0, char_literal289_tree);
                    	}
                    	PushFollow(FOLLOW_pointer_in_pointer1666);
                    	pointer290 = pointer();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, pointer290.Tree);

                    }
                    break;
                case 4 :
                    // ObjectiveC2ansi.g:312:11: '*' type_qualifier_list pointer
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	char_literal291=(IToken)Match(input,42,FOLLOW_42_in_pointer1678); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal291_tree = (object)adaptor.Create(char_literal291);
                    		adaptor.AddChild(root_0, char_literal291_tree);
                    	}
                    	PushFollow(FOLLOW_type_qualifier_list_in_pointer1680);
                    	type_qualifier_list292 = type_qualifier_list();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, type_qualifier_list292.Tree);
                    	PushFollow(FOLLOW_pointer_in_pointer1682);
                    	pointer293 = pointer();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, pointer293.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "pointer"

    public class type_qualifier_list_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "type_qualifier_list"
    // ObjectiveC2ansi.g:315:0: type_qualifier_list : ( type_qualifier )+ ;
    public ObjectiveC2ansiParser.type_qualifier_list_return type_qualifier_list() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.type_qualifier_list_return retval = new ObjectiveC2ansiParser.type_qualifier_list_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        ObjectiveC2ansiParser.type_qualifier_return type_qualifier294 = null;



        try 
    	{
            // ObjectiveC2ansi.g:315:23: ( ( type_qualifier )+ )
            // ObjectiveC2ansi.g:315:23: ( type_qualifier )+
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:315:23: ( type_qualifier )+
            	int cnt67 = 0;
            	do 
            	{
            	    int alt67 = 2;
            	    int LA67_0 = input.LA(1);

            	    if ( ((LA67_0 >= 102 && LA67_0 <= 103) || LA67_0 == 106 || (LA67_0 >= 120 && LA67_0 <= 121) || (LA67_0 >= 125 && LA67_0 <= 126) || LA67_0 == 144) )
            	    {
            	        alt67 = 1;
            	    }


            	    switch (alt67) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:0:0: type_qualifier
            			    {

            			    	PushFollow(FOLLOW_type_qualifier_in_type_qualifier_list1699);
            			    	type_qualifier294 = type_qualifier();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, type_qualifier294.Tree);

            			    }
            			    break;

            			default:
            			    if ( cnt67 >= 1 ) goto loop67;
            			    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            		            EarlyExitException eee67 =
            		                new EarlyExitException(67, input);
            		            throw eee67;
            	    }
            	    cnt67++;
            	} while (true);

            	loop67:
            		;	// Stops C# compiler whining that label 'loop67' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "type_qualifier_list"

    public class direct_declarator_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "direct_declarator"
    // ObjectiveC2ansi.g:317:0: direct_declarator : ( IDENTIFIER | '(' declarator ')' ) ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' )* ;
    public ObjectiveC2ansiParser.direct_declarator_return direct_declarator() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.direct_declarator_return retval = new ObjectiveC2ansiParser.direct_declarator_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken IDENTIFIER295 = null;
        IToken char_literal296 = null;
        IToken char_literal298 = null;
        IToken char_literal299 = null;
        IToken char_literal301 = null;
        IToken char_literal302 = null;
        IToken char_literal303 = null;
        IToken char_literal304 = null;
        IToken char_literal306 = null;
        IToken char_literal307 = null;
        IToken char_literal309 = null;
        IToken char_literal310 = null;
        IToken char_literal311 = null;
        ObjectiveC2ansiParser.declarator_return declarator297 = null;

        ObjectiveC2ansiParser.constant_expression_return constant_expression300 = null;

        ObjectiveC2ansiParser.parameter_type_list_return parameter_type_list305 = null;

        ObjectiveC2ansiParser.identifier_list_return identifier_list308 = null;


        object IDENTIFIER295_tree=null;
        object char_literal296_tree=null;
        object char_literal298_tree=null;
        object char_literal299_tree=null;
        object char_literal301_tree=null;
        object char_literal302_tree=null;
        object char_literal303_tree=null;
        object char_literal304_tree=null;
        object char_literal306_tree=null;
        object char_literal307_tree=null;
        object char_literal309_tree=null;
        object char_literal310_tree=null;
        object char_literal311_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:318:4: ( ( IDENTIFIER | '(' declarator ')' ) ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' )* )
            // ObjectiveC2ansi.g:318:4: ( IDENTIFIER | '(' declarator ')' ) ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:318:4: ( IDENTIFIER | '(' declarator ')' )
            	int alt68 = 2;
            	int LA68_0 = input.LA(1);

            	if ( (LA68_0 == IDENTIFIER) )
            	{
            	    alt68 = 1;
            	}
            	else if ( (LA68_0 == 40) )
            	{
            	    alt68 = 2;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d68s0 =
            	        new NoViableAltException("", 68, 0, input);

            	    throw nvae_d68s0;
            	}
            	switch (alt68) 
            	{
            	    case 1 :
            	        // ObjectiveC2ansi.g:318:5: IDENTIFIER
            	        {

            	        	IDENTIFIER295=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_direct_declarator1711); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{IDENTIFIER295_tree = (object)adaptor.Create(IDENTIFIER295);
            	        		adaptor.AddChild(root_0, IDENTIFIER295_tree);
            	        	}

            	        }
            	        break;
            	    case 2 :
            	        // ObjectiveC2ansi.g:318:18: '(' declarator ')'
            	        {
            	        	char_literal296=(IToken)Match(input,40,FOLLOW_40_in_direct_declarator1715); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{char_literal296_tree = (object)adaptor.Create(char_literal296);
            	        		adaptor.AddChild(root_0, char_literal296_tree);
            	        	}
            	        	PushFollow(FOLLOW_declarator_in_direct_declarator1717);
            	        	declarator297 = declarator();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, declarator297.Tree);
            	        	char_literal298=(IToken)Match(input,41,FOLLOW_41_in_direct_declarator1719); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{char_literal298_tree = (object)adaptor.Create(char_literal298);
            	        		adaptor.AddChild(root_0, char_literal298_tree);
            	        	}

            	        }
            	        break;

            	}

            	// ObjectiveC2ansi.g:319:2: ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' )*
            	do 
            	{
            	    int alt69 = 6;
            	    alt69 = dfa69.Predict(input);
            	    switch (alt69) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:319:3: '[' constant_expression ']'
            			    {

            			    	char_literal299=(IToken)Match(input,72,FOLLOW_72_in_direct_declarator1725); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal299_tree = (object)adaptor.Create(char_literal299);
            			    		adaptor.AddChild(root_0, char_literal299_tree);
            			    	}
            			    	PushFollow(FOLLOW_constant_expression_in_direct_declarator1727);
            			    	constant_expression300 = constant_expression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, constant_expression300.Tree);
            			    	char_literal301=(IToken)Match(input,74,FOLLOW_74_in_direct_declarator1729); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal301_tree = (object)adaptor.Create(char_literal301);
            			    		adaptor.AddChild(root_0, char_literal301_tree);
            			    	}

            			    }
            			    break;
            			case 2 :
            			    // ObjectiveC2ansi.g:319:33: '[' ']'
            			    {

            			    	char_literal302=(IToken)Match(input,72,FOLLOW_72_in_direct_declarator1733); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal302_tree = (object)adaptor.Create(char_literal302);
            			    		adaptor.AddChild(root_0, char_literal302_tree);
            			    	}
            			    	char_literal303=(IToken)Match(input,74,FOLLOW_74_in_direct_declarator1735); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal303_tree = (object)adaptor.Create(char_literal303);
            			    		adaptor.AddChild(root_0, char_literal303_tree);
            			    	}

            			    }
            			    break;
            			case 3 :
            			    // ObjectiveC2ansi.g:319:43: '(' parameter_type_list ')'
            			    {

            			    	char_literal304=(IToken)Match(input,40,FOLLOW_40_in_direct_declarator1739); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal304_tree = (object)adaptor.Create(char_literal304);
            			    		adaptor.AddChild(root_0, char_literal304_tree);
            			    	}
            			    	PushFollow(FOLLOW_parameter_type_list_in_direct_declarator1741);
            			    	parameter_type_list305 = parameter_type_list();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, parameter_type_list305.Tree);
            			    	char_literal306=(IToken)Match(input,41,FOLLOW_41_in_direct_declarator1743); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal306_tree = (object)adaptor.Create(char_literal306);
            			    		adaptor.AddChild(root_0, char_literal306_tree);
            			    	}

            			    }
            			    break;
            			case 4 :
            			    // ObjectiveC2ansi.g:319:73: '(' identifier_list ')'
            			    {

            			    	char_literal307=(IToken)Match(input,40,FOLLOW_40_in_direct_declarator1747); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal307_tree = (object)adaptor.Create(char_literal307);
            			    		adaptor.AddChild(root_0, char_literal307_tree);
            			    	}
            			    	PushFollow(FOLLOW_identifier_list_in_direct_declarator1749);
            			    	identifier_list308 = identifier_list();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, identifier_list308.Tree);
            			    	char_literal309=(IToken)Match(input,41,FOLLOW_41_in_direct_declarator1751); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal309_tree = (object)adaptor.Create(char_literal309);
            			    		adaptor.AddChild(root_0, char_literal309_tree);
            			    	}

            			    }
            			    break;
            			case 5 :
            			    // ObjectiveC2ansi.g:319:99: '(' ')'
            			    {

            			    	char_literal310=(IToken)Match(input,40,FOLLOW_40_in_direct_declarator1755); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal310_tree = (object)adaptor.Create(char_literal310);
            			    		adaptor.AddChild(root_0, char_literal310_tree);
            			    	}
            			    	char_literal311=(IToken)Match(input,41,FOLLOW_41_in_direct_declarator1757); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal311_tree = (object)adaptor.Create(char_literal311);
            			    		adaptor.AddChild(root_0, char_literal311_tree);
            			    	}

            			    }
            			    break;

            			default:
            			    goto loop69;
            	    }
            	} while (true);

            	loop69:
            		;	// Stops C# compiler whining that label 'loop69' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "direct_declarator"

    public class parameter_list_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "parameter_list"
    // ObjectiveC2ansi.g:322:0: parameter_list : ( parameter_declaration ) ( ',' parameter_declaration )* ;
    public ObjectiveC2ansiParser.parameter_list_return parameter_list() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.parameter_list_return retval = new ObjectiveC2ansiParser.parameter_list_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal313 = null;
        ObjectiveC2ansiParser.parameter_declaration_return parameter_declaration312 = null;

        ObjectiveC2ansiParser.parameter_declaration_return parameter_declaration314 = null;


        object char_literal313_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:323:11: ( ( parameter_declaration ) ( ',' parameter_declaration )* )
            // ObjectiveC2ansi.g:323:11: ( parameter_declaration ) ( ',' parameter_declaration )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:323:11: ( parameter_declaration )
            	// ObjectiveC2ansi.g:323:12: parameter_declaration
            	{
            		PushFollow(FOLLOW_parameter_declaration_in_parameter_list1785);
            		parameter_declaration312 = parameter_declaration();
            		state.followingStackPointer--;
            		if (state.failed) return retval;
            		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, parameter_declaration312.Tree);

            	}

            	// ObjectiveC2ansi.g:323:35: ( ',' parameter_declaration )*
            	do 
            	{
            	    int alt70 = 2;
            	    int LA70_0 = input.LA(1);

            	    if ( (LA70_0 == 44) )
            	    {
            	        int LA70_2 = input.LA(2);

            	        if ( (LA70_2 == IDENTIFIER || LA70_2 == 100 || (LA70_2 >= 102 && LA70_2 <= 103) || (LA70_2 >= 105 && LA70_2 <= 106) || LA70_2 == 111 || (LA70_2 >= 113 && LA70_2 <= 115) || LA70_2 == 118 || (LA70_2 >= 120 && LA70_2 <= 123) || (LA70_2 >= 125 && LA70_2 <= 126) || LA70_2 == 129 || (LA70_2 >= 133 && LA70_2 <= 134) || (LA70_2 >= 136 && LA70_2 <= 137) || (LA70_2 >= 140 && LA70_2 <= 144)) )
            	        {
            	            alt70 = 1;
            	        }


            	    }


            	    switch (alt70) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:323:36: ',' parameter_declaration
            			    {

            			    	char_literal313=(IToken)Match(input,44,FOLLOW_44_in_parameter_list1789); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal313_tree = (object)adaptor.Create(char_literal313);
            			    		adaptor.AddChild(root_0, char_literal313_tree);
            			    	}
            			    	PushFollow(FOLLOW_parameter_declaration_in_parameter_list1791);
            			    	parameter_declaration314 = parameter_declaration();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, parameter_declaration314.Tree);

            			    }
            			    break;

            			default:
            			    goto loop70;
            	    }
            	} while (true);

            	loop70:
            		;	// Stops C# compiler whining that label 'loop70' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "parameter_list"

    public class parameter_type_list_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "parameter_type_list"
    // ObjectiveC2ansi.g:326:0: parameter_type_list : ( parameter_list | parameter_list ( ',' '...' ) );
    public ObjectiveC2ansiParser.parameter_type_list_return parameter_type_list() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.parameter_type_list_return retval = new ObjectiveC2ansiParser.parameter_type_list_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal317 = null;
        IToken string_literal318 = null;
        ObjectiveC2ansiParser.parameter_list_return parameter_list315 = null;

        ObjectiveC2ansiParser.parameter_list_return parameter_list316 = null;


        object char_literal317_tree=null;
        object string_literal318_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:327:8: ( parameter_list | parameter_list ( ',' '...' ) )
            int alt71 = 2;
            alt71 = dfa71.Predict(input);
            switch (alt71) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:327:8: parameter_list
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_parameter_list_in_parameter_type_list1815);
                    	parameter_list315 = parameter_list();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, parameter_list315.Tree);

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:328:11: parameter_list ( ',' '...' )
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_parameter_list_in_parameter_type_list1827);
                    	parameter_list316 = parameter_list();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, parameter_list316.Tree);
                    	// ObjectiveC2ansi.g:328:26: ( ',' '...' )
                    	// ObjectiveC2ansi.g:328:27: ',' '...'
                    	{
                    		char_literal317=(IToken)Match(input,44,FOLLOW_44_in_parameter_type_list1830); if (state.failed) return retval;
                    		if ( state.backtracking == 0 )
                    		{char_literal317_tree = (object)adaptor.Create(char_literal317);
                    			adaptor.AddChild(root_0, char_literal317_tree);
                    		}
                    		string_literal318=(IToken)Match(input,46,FOLLOW_46_in_parameter_type_list1832); if (state.failed) return retval;
                    		if ( state.backtracking == 0 )
                    		{string_literal318_tree = (object)adaptor.Create(string_literal318);
                    			adaptor.AddChild(root_0, string_literal318_tree);
                    		}

                    	}


                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "parameter_type_list"

    public class identifier_list_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "identifier_list"
    // ObjectiveC2ansi.g:331:0: identifier_list : ( IDENTIFIER ) ( ',' IDENTIFIER )* ;
    public ObjectiveC2ansiParser.identifier_list_return identifier_list() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.identifier_list_return retval = new ObjectiveC2ansiParser.identifier_list_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken IDENTIFIER319 = null;
        IToken char_literal320 = null;
        IToken IDENTIFIER321 = null;

        object IDENTIFIER319_tree=null;
        object char_literal320_tree=null;
        object IDENTIFIER321_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:332:11: ( ( IDENTIFIER ) ( ',' IDENTIFIER )* )
            // ObjectiveC2ansi.g:332:11: ( IDENTIFIER ) ( ',' IDENTIFIER )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:332:11: ( IDENTIFIER )
            	// ObjectiveC2ansi.g:332:12: IDENTIFIER
            	{
            		IDENTIFIER319=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_identifier_list1867); if (state.failed) return retval;
            		if ( state.backtracking == 0 )
            		{IDENTIFIER319_tree = (object)adaptor.Create(IDENTIFIER319);
            			adaptor.AddChild(root_0, IDENTIFIER319_tree);
            		}

            	}

            	// ObjectiveC2ansi.g:332:24: ( ',' IDENTIFIER )*
            	do 
            	{
            	    int alt72 = 2;
            	    int LA72_0 = input.LA(1);

            	    if ( (LA72_0 == 44) )
            	    {
            	        alt72 = 1;
            	    }


            	    switch (alt72) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:332:25: ',' IDENTIFIER
            			    {

            			    	char_literal320=(IToken)Match(input,44,FOLLOW_44_in_identifier_list1871); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal320_tree = (object)adaptor.Create(char_literal320);
            			    		adaptor.AddChild(root_0, char_literal320_tree);
            			    	}
            			    	IDENTIFIER321=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_identifier_list1873); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{IDENTIFIER321_tree = (object)adaptor.Create(IDENTIFIER321);
            			    		adaptor.AddChild(root_0, IDENTIFIER321_tree);
            			    	}

            			    }
            			    break;

            			default:
            			    goto loop72;
            	    }
            	} while (true);

            	loop72:
            		;	// Stops C# compiler whining that label 'loop72' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "identifier_list"

    public class declarator_suffix_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "declarator_suffix"
    // ObjectiveC2ansi.g:335:0: declarator_suffix : ( '[' ( constant_expression )? ']' | '(' ( parameter_list )? ')' );
    public ObjectiveC2ansiParser.declarator_suffix_return declarator_suffix() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.declarator_suffix_return retval = new ObjectiveC2ansiParser.declarator_suffix_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal322 = null;
        IToken char_literal324 = null;
        IToken char_literal325 = null;
        IToken char_literal327 = null;
        ObjectiveC2ansiParser.constant_expression_return constant_expression323 = null;

        ObjectiveC2ansiParser.parameter_list_return parameter_list326 = null;


        object char_literal322_tree=null;
        object char_literal324_tree=null;
        object char_literal325_tree=null;
        object char_literal327_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:335:21: ( '[' ( constant_expression )? ']' | '(' ( parameter_list )? ')' )
            int alt75 = 2;
            int LA75_0 = input.LA(1);

            if ( (LA75_0 == 72) )
            {
                alt75 = 1;
            }
            else if ( (LA75_0 == 40) )
            {
                alt75 = 2;
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                NoViableAltException nvae_d75s0 =
                    new NoViableAltException("", 75, 0, input);

                throw nvae_d75s0;
            }
            switch (alt75) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:335:21: '[' ( constant_expression )? ']'
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	char_literal322=(IToken)Match(input,72,FOLLOW_72_in_declarator_suffix1892); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal322_tree = (object)adaptor.Create(char_literal322);
                    		adaptor.AddChild(root_0, char_literal322_tree);
                    	}
                    	// ObjectiveC2ansi.g:335:25: ( constant_expression )?
                    	int alt73 = 2;
                    	int LA73_0 = input.LA(1);

                    	if ( (LA73_0 == CHARACTER_LITERAL || LA73_0 == DECIMAL_LITERAL || LA73_0 == FLOATING_POINT_LITERAL || LA73_0 == HEX_LITERAL || LA73_0 == IDENTIFIER || LA73_0 == OCTAL_LITERAL || LA73_0 == STRING_LITERAL || (LA73_0 >= 22 && LA73_0 <= 24) || LA73_0 == 37 || LA73_0 == 40 || LA73_0 == 42 || LA73_0 == 56 || LA73_0 == 65 || LA73_0 == 67 || LA73_0 == 72 || LA73_0 == 82 || LA73_0 == 84 || LA73_0 == 132 || LA73_0 == 135) )
                    	{
                    	    alt73 = 1;
                    	}
                    	switch (alt73) 
                    	{
                    	    case 1 :
                    	        // ObjectiveC2ansi.g:0:0: constant_expression
                    	        {

                    	        	PushFollow(FOLLOW_constant_expression_in_declarator_suffix1894);
                    	        	constant_expression323 = constant_expression();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, constant_expression323.Tree);

                    	        }
                    	        break;

                    	}

                    	char_literal324=(IToken)Match(input,74,FOLLOW_74_in_declarator_suffix1897); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal324_tree = (object)adaptor.Create(char_literal324);
                    		adaptor.AddChild(root_0, char_literal324_tree);
                    	}

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:336:7: '(' ( parameter_list )? ')'
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	char_literal325=(IToken)Match(input,40,FOLLOW_40_in_declarator_suffix1905); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal325_tree = (object)adaptor.Create(char_literal325);
                    		adaptor.AddChild(root_0, char_literal325_tree);
                    	}
                    	// ObjectiveC2ansi.g:336:11: ( parameter_list )?
                    	int alt74 = 2;
                    	int LA74_0 = input.LA(1);

                    	if ( (LA74_0 == IDENTIFIER || LA74_0 == 100 || (LA74_0 >= 102 && LA74_0 <= 103) || (LA74_0 >= 105 && LA74_0 <= 106) || LA74_0 == 111 || (LA74_0 >= 113 && LA74_0 <= 115) || LA74_0 == 118 || (LA74_0 >= 120 && LA74_0 <= 123) || (LA74_0 >= 125 && LA74_0 <= 126) || LA74_0 == 129 || (LA74_0 >= 133 && LA74_0 <= 134) || (LA74_0 >= 136 && LA74_0 <= 137) || (LA74_0 >= 140 && LA74_0 <= 144)) )
                    	{
                    	    alt74 = 1;
                    	}
                    	switch (alt74) 
                    	{
                    	    case 1 :
                    	        // ObjectiveC2ansi.g:0:0: parameter_list
                    	        {

                    	        	PushFollow(FOLLOW_parameter_list_in_declarator_suffix1907);
                    	        	parameter_list326 = parameter_list();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, parameter_list326.Tree);

                    	        }
                    	        break;

                    	}

                    	char_literal327=(IToken)Match(input,41,FOLLOW_41_in_declarator_suffix1910); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal327_tree = (object)adaptor.Create(char_literal327);
                    		adaptor.AddChild(root_0, char_literal327_tree);
                    	}

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "declarator_suffix"

    public class parameter_declaration_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "parameter_declaration"
    // ObjectiveC2ansi.g:339:0: parameter_declaration : declaration_specifiers ( declarator | abstract_declarator )? ;
    public ObjectiveC2ansiParser.parameter_declaration_return parameter_declaration() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.parameter_declaration_return retval = new ObjectiveC2ansiParser.parameter_declaration_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        ObjectiveC2ansiParser.declaration_specifiers_return declaration_specifiers328 = null;

        ObjectiveC2ansiParser.declarator_return declarator329 = null;

        ObjectiveC2ansiParser.abstract_declarator_return abstract_declarator330 = null;



        try 
    	{
            // ObjectiveC2ansi.g:340:5: ( declaration_specifiers ( declarator | abstract_declarator )? )
            // ObjectiveC2ansi.g:340:5: declaration_specifiers ( declarator | abstract_declarator )?
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_declaration_specifiers_in_parameter_declaration1922);
            	declaration_specifiers328 = declaration_specifiers();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, declaration_specifiers328.Tree);
            	// ObjectiveC2ansi.g:340:28: ( declarator | abstract_declarator )?
            	int alt76 = 3;
            	alt76 = dfa76.Predict(input);
            	switch (alt76) 
            	{
            	    case 1 :
            	        // ObjectiveC2ansi.g:340:29: declarator
            	        {

            	        	PushFollow(FOLLOW_declarator_in_parameter_declaration1925);
            	        	declarator329 = declarator();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, declarator329.Tree);

            	        }
            	        break;
            	    case 2 :
            	        // ObjectiveC2ansi.g:340:42: abstract_declarator
            	        {

            	        	PushFollow(FOLLOW_abstract_declarator_in_parameter_declaration1929);
            	        	abstract_declarator330 = abstract_declarator();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, abstract_declarator330.Tree);

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "parameter_declaration"

    public class initializer_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "initializer"
    // ObjectiveC2ansi.g:342:0: initializer : ( assignment_expression | '{' initializer ( ',' initializer )* '}' );
    public ObjectiveC2ansiParser.initializer_return initializer() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.initializer_return retval = new ObjectiveC2ansiParser.initializer_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal332 = null;
        IToken char_literal334 = null;
        IToken char_literal336 = null;
        ObjectiveC2ansiParser.assignment_expression_return assignment_expression331 = null;

        ObjectiveC2ansiParser.initializer_return initializer333 = null;

        ObjectiveC2ansiParser.initializer_return initializer335 = null;


        object char_literal332_tree=null;
        object char_literal334_tree=null;
        object char_literal336_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:342:15: ( assignment_expression | '{' initializer ( ',' initializer )* '}' )
            int alt78 = 2;
            int LA78_0 = input.LA(1);

            if ( (LA78_0 == CHARACTER_LITERAL || LA78_0 == DECIMAL_LITERAL || LA78_0 == FLOATING_POINT_LITERAL || LA78_0 == HEX_LITERAL || LA78_0 == IDENTIFIER || LA78_0 == OCTAL_LITERAL || LA78_0 == STRING_LITERAL || (LA78_0 >= 22 && LA78_0 <= 24) || LA78_0 == 37 || LA78_0 == 40 || LA78_0 == 42 || LA78_0 == 56 || LA78_0 == 65 || LA78_0 == 67 || LA78_0 == 72 || LA78_0 == 82 || LA78_0 == 84 || LA78_0 == 132 || LA78_0 == 135) )
            {
                alt78 = 1;
            }
            else if ( (LA78_0 == 77) )
            {
                alt78 = 2;
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                NoViableAltException nvae_d78s0 =
                    new NoViableAltException("", 78, 0, input);

                throw nvae_d78s0;
            }
            switch (alt78) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:342:15: assignment_expression
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_assignment_expression_in_initializer1940);
                    	assignment_expression331 = assignment_expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, assignment_expression331.Tree);

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:343:8: '{' initializer ( ',' initializer )* '}'
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	char_literal332=(IToken)Match(input,77,FOLLOW_77_in_initializer1949); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal332_tree = (object)adaptor.Create(char_literal332);
                    		adaptor.AddChild(root_0, char_literal332_tree);
                    	}
                    	PushFollow(FOLLOW_initializer_in_initializer1951);
                    	initializer333 = initializer();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, initializer333.Tree);
                    	// ObjectiveC2ansi.g:343:24: ( ',' initializer )*
                    	do 
                    	{
                    	    int alt77 = 2;
                    	    int LA77_0 = input.LA(1);

                    	    if ( (LA77_0 == 44) )
                    	    {
                    	        alt77 = 1;
                    	    }


                    	    switch (alt77) 
                    		{
                    			case 1 :
                    			    // ObjectiveC2ansi.g:343:25: ',' initializer
                    			    {

                    			    	char_literal334=(IToken)Match(input,44,FOLLOW_44_in_initializer1954); if (state.failed) return retval;
                    			    	if ( state.backtracking == 0 )
                    			    	{char_literal334_tree = (object)adaptor.Create(char_literal334);
                    			    		adaptor.AddChild(root_0, char_literal334_tree);
                    			    	}
                    			    	PushFollow(FOLLOW_initializer_in_initializer1956);
                    			    	initializer335 = initializer();
                    			    	state.followingStackPointer--;
                    			    	if (state.failed) return retval;
                    			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, initializer335.Tree);

                    			    }
                    			    break;

                    			default:
                    			    goto loop77;
                    	    }
                    	} while (true);

                    	loop77:
                    		;	// Stops C# compiler whining that label 'loop77' has no statements

                    	char_literal336=(IToken)Match(input,81,FOLLOW_81_in_initializer1960); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal336_tree = (object)adaptor.Create(char_literal336);
                    		adaptor.AddChild(root_0, char_literal336_tree);
                    	}

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "initializer"

    public class type_name_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "type_name"
    // ObjectiveC2ansi.g:345:0: type_name : specifier_qualifier_list abstract_declarator ;
    public ObjectiveC2ansiParser.type_name_return type_name() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.type_name_return retval = new ObjectiveC2ansiParser.type_name_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        ObjectiveC2ansiParser.specifier_qualifier_list_return specifier_qualifier_list337 = null;

        ObjectiveC2ansiParser.abstract_declarator_return abstract_declarator338 = null;



        try 
    	{
            // ObjectiveC2ansi.g:345:13: ( specifier_qualifier_list abstract_declarator )
            // ObjectiveC2ansi.g:345:13: specifier_qualifier_list abstract_declarator
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_specifier_qualifier_list_in_type_name1969);
            	specifier_qualifier_list337 = specifier_qualifier_list();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, specifier_qualifier_list337.Tree);
            	PushFollow(FOLLOW_abstract_declarator_in_type_name1971);
            	abstract_declarator338 = abstract_declarator();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, abstract_declarator338.Tree);

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "type_name"

    public class abstract_declarator_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "abstract_declarator"
    // ObjectiveC2ansi.g:347:0: abstract_declarator : ( '*' ( type_qualifier )* abstract_declarator | '(' abstract_declarator ')' ( abstract_declarator_suffix )+ | ( '[' ( constant_expression )? ']' )+ |);
    public ObjectiveC2ansiParser.abstract_declarator_return abstract_declarator() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.abstract_declarator_return retval = new ObjectiveC2ansiParser.abstract_declarator_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal339 = null;
        IToken char_literal342 = null;
        IToken char_literal344 = null;
        IToken char_literal346 = null;
        IToken char_literal348 = null;
        ObjectiveC2ansiParser.type_qualifier_return type_qualifier340 = null;

        ObjectiveC2ansiParser.abstract_declarator_return abstract_declarator341 = null;

        ObjectiveC2ansiParser.abstract_declarator_return abstract_declarator343 = null;

        ObjectiveC2ansiParser.abstract_declarator_suffix_return abstract_declarator_suffix345 = null;

        ObjectiveC2ansiParser.constant_expression_return constant_expression347 = null;


        object char_literal339_tree=null;
        object char_literal342_tree=null;
        object char_literal344_tree=null;
        object char_literal346_tree=null;
        object char_literal348_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:347:23: ( '*' ( type_qualifier )* abstract_declarator | '(' abstract_declarator ')' ( abstract_declarator_suffix )+ | ( '[' ( constant_expression )? ']' )+ |)
            int alt83 = 4;
            alt83 = dfa83.Predict(input);
            switch (alt83) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:347:23: '*' ( type_qualifier )* abstract_declarator
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	char_literal339=(IToken)Match(input,42,FOLLOW_42_in_abstract_declarator1980); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal339_tree = (object)adaptor.Create(char_literal339);
                    		adaptor.AddChild(root_0, char_literal339_tree);
                    	}
                    	// ObjectiveC2ansi.g:347:27: ( type_qualifier )*
                    	do 
                    	{
                    	    int alt79 = 2;
                    	    int LA79_0 = input.LA(1);

                    	    if ( ((LA79_0 >= 102 && LA79_0 <= 103) || LA79_0 == 106 || (LA79_0 >= 120 && LA79_0 <= 121) || (LA79_0 >= 125 && LA79_0 <= 126) || LA79_0 == 144) )
                    	    {
                    	        alt79 = 1;
                    	    }


                    	    switch (alt79) 
                    		{
                    			case 1 :
                    			    // ObjectiveC2ansi.g:0:0: type_qualifier
                    			    {

                    			    	PushFollow(FOLLOW_type_qualifier_in_abstract_declarator1982);
                    			    	type_qualifier340 = type_qualifier();
                    			    	state.followingStackPointer--;
                    			    	if (state.failed) return retval;
                    			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, type_qualifier340.Tree);

                    			    }
                    			    break;

                    			default:
                    			    goto loop79;
                    	    }
                    	} while (true);

                    	loop79:
                    		;	// Stops C# compiler whining that label 'loop79' has no statements

                    	PushFollow(FOLLOW_abstract_declarator_in_abstract_declarator1985);
                    	abstract_declarator341 = abstract_declarator();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, abstract_declarator341.Tree);

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:348:5: '(' abstract_declarator ')' ( abstract_declarator_suffix )+
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	char_literal342=(IToken)Match(input,40,FOLLOW_40_in_abstract_declarator1992); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal342_tree = (object)adaptor.Create(char_literal342);
                    		adaptor.AddChild(root_0, char_literal342_tree);
                    	}
                    	PushFollow(FOLLOW_abstract_declarator_in_abstract_declarator1994);
                    	abstract_declarator343 = abstract_declarator();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, abstract_declarator343.Tree);
                    	char_literal344=(IToken)Match(input,41,FOLLOW_41_in_abstract_declarator1996); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal344_tree = (object)adaptor.Create(char_literal344);
                    		adaptor.AddChild(root_0, char_literal344_tree);
                    	}
                    	// ObjectiveC2ansi.g:348:33: ( abstract_declarator_suffix )+
                    	int cnt80 = 0;
                    	do 
                    	{
                    	    int alt80 = 2;
                    	    alt80 = dfa80.Predict(input);
                    	    switch (alt80) 
                    		{
                    			case 1 :
                    			    // ObjectiveC2ansi.g:0:0: abstract_declarator_suffix
                    			    {

                    			    	PushFollow(FOLLOW_abstract_declarator_suffix_in_abstract_declarator1998);
                    			    	abstract_declarator_suffix345 = abstract_declarator_suffix();
                    			    	state.followingStackPointer--;
                    			    	if (state.failed) return retval;
                    			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, abstract_declarator_suffix345.Tree);

                    			    }
                    			    break;

                    			default:
                    			    if ( cnt80 >= 1 ) goto loop80;
                    			    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    		            EarlyExitException eee80 =
                    		                new EarlyExitException(80, input);
                    		            throw eee80;
                    	    }
                    	    cnt80++;
                    	} while (true);

                    	loop80:
                    		;	// Stops C# compiler whining that label 'loop80' has no statements


                    }
                    break;
                case 3 :
                    // ObjectiveC2ansi.g:349:5: ( '[' ( constant_expression )? ']' )+
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	// ObjectiveC2ansi.g:349:5: ( '[' ( constant_expression )? ']' )+
                    	int cnt82 = 0;
                    	do 
                    	{
                    	    int alt82 = 2;
                    	    int LA82_0 = input.LA(1);

                    	    if ( (LA82_0 == 72) )
                    	    {
                    	        alt82 = 1;
                    	    }


                    	    switch (alt82) 
                    		{
                    			case 1 :
                    			    // ObjectiveC2ansi.g:349:6: '[' ( constant_expression )? ']'
                    			    {

                    			    	char_literal346=(IToken)Match(input,72,FOLLOW_72_in_abstract_declarator2006); if (state.failed) return retval;
                    			    	if ( state.backtracking == 0 )
                    			    	{char_literal346_tree = (object)adaptor.Create(char_literal346);
                    			    		adaptor.AddChild(root_0, char_literal346_tree);
                    			    	}
                    			    	// ObjectiveC2ansi.g:349:10: ( constant_expression )?
                    			    	int alt81 = 2;
                    			    	int LA81_0 = input.LA(1);

                    			    	if ( (LA81_0 == CHARACTER_LITERAL || LA81_0 == DECIMAL_LITERAL || LA81_0 == FLOATING_POINT_LITERAL || LA81_0 == HEX_LITERAL || LA81_0 == IDENTIFIER || LA81_0 == OCTAL_LITERAL || LA81_0 == STRING_LITERAL || (LA81_0 >= 22 && LA81_0 <= 24) || LA81_0 == 37 || LA81_0 == 40 || LA81_0 == 42 || LA81_0 == 56 || LA81_0 == 65 || LA81_0 == 67 || LA81_0 == 72 || LA81_0 == 82 || LA81_0 == 84 || LA81_0 == 132 || LA81_0 == 135) )
                    			    	{
                    			    	    alt81 = 1;
                    			    	}
                    			    	switch (alt81) 
                    			    	{
                    			    	    case 1 :
                    			    	        // ObjectiveC2ansi.g:0:0: constant_expression
                    			    	        {

                    			    	        	PushFollow(FOLLOW_constant_expression_in_abstract_declarator2008);
                    			    	        	constant_expression347 = constant_expression();
                    			    	        	state.followingStackPointer--;
                    			    	        	if (state.failed) return retval;
                    			    	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, constant_expression347.Tree);

                    			    	        }
                    			    	        break;

                    			    	}

                    			    	char_literal348=(IToken)Match(input,74,FOLLOW_74_in_abstract_declarator2011); if (state.failed) return retval;
                    			    	if ( state.backtracking == 0 )
                    			    	{char_literal348_tree = (object)adaptor.Create(char_literal348);
                    			    		adaptor.AddChild(root_0, char_literal348_tree);
                    			    	}

                    			    }
                    			    break;

                    			default:
                    			    if ( cnt82 >= 1 ) goto loop82;
                    			    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    		            EarlyExitException eee82 =
                    		                new EarlyExitException(82, input);
                    		            throw eee82;
                    	    }
                    	    cnt82++;
                    	} while (true);

                    	loop82:
                    		;	// Stops C# compiler whining that label 'loop82' has no statements


                    }
                    break;
                case 4 :
                    // ObjectiveC2ansi.g:350:5: 
                    {
                    	root_0 = (object)adaptor.GetNilNode();



                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "abstract_declarator"

    public class abstract_declarator_suffix_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "abstract_declarator_suffix"
    // ObjectiveC2ansi.g:352:0: abstract_declarator_suffix : ( '[' ( constant_expression )? ']' | '(' ( parameter_declaration_list )? ')' );
    public ObjectiveC2ansiParser.abstract_declarator_suffix_return abstract_declarator_suffix() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.abstract_declarator_suffix_return retval = new ObjectiveC2ansiParser.abstract_declarator_suffix_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal349 = null;
        IToken char_literal351 = null;
        IToken char_literal352 = null;
        IToken char_literal354 = null;
        ObjectiveC2ansiParser.constant_expression_return constant_expression350 = null;

        ObjectiveC2ansiParser.parameter_declaration_list_return parameter_declaration_list353 = null;


        object char_literal349_tree=null;
        object char_literal351_tree=null;
        object char_literal352_tree=null;
        object char_literal354_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:353:5: ( '[' ( constant_expression )? ']' | '(' ( parameter_declaration_list )? ')' )
            int alt86 = 2;
            int LA86_0 = input.LA(1);

            if ( (LA86_0 == 72) )
            {
                alt86 = 1;
            }
            else if ( (LA86_0 == 40) )
            {
                alt86 = 2;
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                NoViableAltException nvae_d86s0 =
                    new NoViableAltException("", 86, 0, input);

                throw nvae_d86s0;
            }
            switch (alt86) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:353:5: '[' ( constant_expression )? ']'
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	char_literal349=(IToken)Match(input,72,FOLLOW_72_in_abstract_declarator_suffix2028); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal349_tree = (object)adaptor.Create(char_literal349);
                    		adaptor.AddChild(root_0, char_literal349_tree);
                    	}
                    	// ObjectiveC2ansi.g:353:9: ( constant_expression )?
                    	int alt84 = 2;
                    	int LA84_0 = input.LA(1);

                    	if ( (LA84_0 == CHARACTER_LITERAL || LA84_0 == DECIMAL_LITERAL || LA84_0 == FLOATING_POINT_LITERAL || LA84_0 == HEX_LITERAL || LA84_0 == IDENTIFIER || LA84_0 == OCTAL_LITERAL || LA84_0 == STRING_LITERAL || (LA84_0 >= 22 && LA84_0 <= 24) || LA84_0 == 37 || LA84_0 == 40 || LA84_0 == 42 || LA84_0 == 56 || LA84_0 == 65 || LA84_0 == 67 || LA84_0 == 72 || LA84_0 == 82 || LA84_0 == 84 || LA84_0 == 132 || LA84_0 == 135) )
                    	{
                    	    alt84 = 1;
                    	}
                    	switch (alt84) 
                    	{
                    	    case 1 :
                    	        // ObjectiveC2ansi.g:0:0: constant_expression
                    	        {

                    	        	PushFollow(FOLLOW_constant_expression_in_abstract_declarator_suffix2030);
                    	        	constant_expression350 = constant_expression();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, constant_expression350.Tree);

                    	        }
                    	        break;

                    	}

                    	char_literal351=(IToken)Match(input,74,FOLLOW_74_in_abstract_declarator_suffix2033); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal351_tree = (object)adaptor.Create(char_literal351);
                    		adaptor.AddChild(root_0, char_literal351_tree);
                    	}

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:354:5: '(' ( parameter_declaration_list )? ')'
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	char_literal352=(IToken)Match(input,40,FOLLOW_40_in_abstract_declarator_suffix2039); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal352_tree = (object)adaptor.Create(char_literal352);
                    		adaptor.AddChild(root_0, char_literal352_tree);
                    	}
                    	// ObjectiveC2ansi.g:354:10: ( parameter_declaration_list )?
                    	int alt85 = 2;
                    	int LA85_0 = input.LA(1);

                    	if ( (LA85_0 == IDENTIFIER || LA85_0 == 100 || (LA85_0 >= 102 && LA85_0 <= 103) || (LA85_0 >= 105 && LA85_0 <= 106) || LA85_0 == 111 || (LA85_0 >= 113 && LA85_0 <= 115) || LA85_0 == 118 || (LA85_0 >= 120 && LA85_0 <= 123) || (LA85_0 >= 125 && LA85_0 <= 126) || LA85_0 == 129 || (LA85_0 >= 133 && LA85_0 <= 134) || (LA85_0 >= 136 && LA85_0 <= 137) || (LA85_0 >= 140 && LA85_0 <= 144)) )
                    	{
                    	    alt85 = 1;
                    	}
                    	switch (alt85) 
                    	{
                    	    case 1 :
                    	        // ObjectiveC2ansi.g:0:0: parameter_declaration_list
                    	        {

                    	        	PushFollow(FOLLOW_parameter_declaration_list_in_abstract_declarator_suffix2042);
                    	        	parameter_declaration_list353 = parameter_declaration_list();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, parameter_declaration_list353.Tree);

                    	        }
                    	        break;

                    	}

                    	char_literal354=(IToken)Match(input,41,FOLLOW_41_in_abstract_declarator_suffix2045); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal354_tree = (object)adaptor.Create(char_literal354);
                    		adaptor.AddChild(root_0, char_literal354_tree);
                    	}

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "abstract_declarator_suffix"

    public class parameter_declaration_list_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "parameter_declaration_list"
    // ObjectiveC2ansi.g:356:0: parameter_declaration_list : parameter_declaration ( ',' parameter_declaration )* ;
    public ObjectiveC2ansiParser.parameter_declaration_list_return parameter_declaration_list() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.parameter_declaration_list_return retval = new ObjectiveC2ansiParser.parameter_declaration_list_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal356 = null;
        ObjectiveC2ansiParser.parameter_declaration_return parameter_declaration355 = null;

        ObjectiveC2ansiParser.parameter_declaration_return parameter_declaration357 = null;


        object char_literal356_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:357:5: ( parameter_declaration ( ',' parameter_declaration )* )
            // ObjectiveC2ansi.g:357:5: parameter_declaration ( ',' parameter_declaration )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_parameter_declaration_in_parameter_declaration_list2056);
            	parameter_declaration355 = parameter_declaration();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, parameter_declaration355.Tree);
            	// ObjectiveC2ansi.g:357:27: ( ',' parameter_declaration )*
            	do 
            	{
            	    int alt87 = 2;
            	    int LA87_0 = input.LA(1);

            	    if ( (LA87_0 == 44) )
            	    {
            	        alt87 = 1;
            	    }


            	    switch (alt87) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:357:29: ',' parameter_declaration
            			    {

            			    	char_literal356=(IToken)Match(input,44,FOLLOW_44_in_parameter_declaration_list2060); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal356_tree = (object)adaptor.Create(char_literal356);
            			    		adaptor.AddChild(root_0, char_literal356_tree);
            			    	}
            			    	PushFollow(FOLLOW_parameter_declaration_in_parameter_declaration_list2062);
            			    	parameter_declaration357 = parameter_declaration();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, parameter_declaration357.Tree);

            			    }
            			    break;

            			default:
            			    goto loop87;
            	    }
            	} while (true);

            	loop87:
            		;	// Stops C# compiler whining that label 'loop87' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "parameter_declaration_list"

    public class statement_list_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "statement_list"
    // ObjectiveC2ansi.g:359:0: statement_list : ( statement )+ ;
    public ObjectiveC2ansiParser.statement_list_return statement_list() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.statement_list_return retval = new ObjectiveC2ansiParser.statement_list_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        ObjectiveC2ansiParser.statement_return statement358 = null;



        try 
    	{
            // ObjectiveC2ansi.g:359:18: ( ( statement )+ )
            // ObjectiveC2ansi.g:359:18: ( statement )+
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// ObjectiveC2ansi.g:359:18: ( statement )+
            	int cnt88 = 0;
            	do 
            	{
            	    int alt88 = 2;
            	    int LA88_0 = input.LA(1);

            	    if ( (LA88_0 == CHARACTER_LITERAL || LA88_0 == DECIMAL_LITERAL || LA88_0 == FLOATING_POINT_LITERAL || LA88_0 == HEX_LITERAL || LA88_0 == IDENTIFIER || LA88_0 == OCTAL_LITERAL || LA88_0 == STRING_LITERAL || (LA88_0 >= 22 && LA88_0 <= 24) || LA88_0 == 37 || LA88_0 == 40 || LA88_0 == 42 || LA88_0 == 51 || LA88_0 == 56 || LA88_0 == 65 || LA88_0 == 67 || LA88_0 == 72 || LA88_0 == 77 || LA88_0 == 82 || LA88_0 == 84 || LA88_0 == 101 || LA88_0 == 104 || LA88_0 == 107 || (LA88_0 >= 109 && LA88_0 <= 110) || (LA88_0 >= 116 && LA88_0 <= 117) || LA88_0 == 119 || (LA88_0 >= 131 && LA88_0 <= 132) || LA88_0 == 135 || LA88_0 == 139 || LA88_0 == 145) )
            	    {
            	        alt88 = 1;
            	    }


            	    switch (alt88) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:359:19: statement
            			    {

            			    	PushFollow(FOLLOW_statement_in_statement_list2075);
            			    	statement358 = statement();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, statement358.Tree);

            			    }
            			    break;

            			default:
            			    if ( cnt88 >= 1 ) goto loop88;
            			    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            		            EarlyExitException eee88 =
            		                new EarlyExitException(88, input);
            		            throw eee88;
            	    }
            	    cnt88++;
            	} while (true);

            	loop88:
            		;	// Stops C# compiler whining that label 'loop88' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "statement_list"

    public class statement_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "statement"
    // ObjectiveC2ansi.g:361:0: statement : ( labeled_statement | expression ';' | compound_statement | selection_statement | iteration_statement | jump_statement | ';' );
    public ObjectiveC2ansiParser.statement_return statement() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.statement_return retval = new ObjectiveC2ansiParser.statement_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal361 = null;
        IToken char_literal366 = null;
        ObjectiveC2ansiParser.labeled_statement_return labeled_statement359 = null;

        ObjectiveC2ansiParser.expression_return expression360 = null;

        ObjectiveC2ansiParser.compound_statement_return compound_statement362 = null;

        ObjectiveC2ansiParser.selection_statement_return selection_statement363 = null;

        ObjectiveC2ansiParser.iteration_statement_return iteration_statement364 = null;

        ObjectiveC2ansiParser.jump_statement_return jump_statement365 = null;


        object char_literal361_tree=null;
        object char_literal366_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:362:5: ( labeled_statement | expression ';' | compound_statement | selection_statement | iteration_statement | jump_statement | ';' )
            int alt89 = 7;
            switch ( input.LA(1) ) 
            {
            case IDENTIFIER:
            	{
                int LA89_1 = input.LA(2);

                if ( (LA89_1 == 50) )
                {
                    alt89 = 1;
                }
                else if ( ((LA89_1 >= 22 && LA89_1 <= 23) || LA89_1 == 25 || (LA89_1 >= 35 && LA89_1 <= 40) || (LA89_1 >= 42 && LA89_1 <= 45) || (LA89_1 >= 48 && LA89_1 <= 49) || (LA89_1 >= 51 && LA89_1 <= 52) || LA89_1 == 72 || (LA89_1 >= 75 && LA89_1 <= 76) || (LA89_1 >= 78 && LA89_1 <= 80) || (LA89_1 >= 83 && LA89_1 <= 97)) )
                {
                    alt89 = 2;
                }
                else 
                {
                    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    NoViableAltException nvae_d89s1 =
                        new NoViableAltException("", 89, 1, input);

                    throw nvae_d89s1;
                }
                }
                break;
            case 104:
            case 109:
            	{
                alt89 = 1;
                }
                break;
            case CHARACTER_LITERAL:
            case DECIMAL_LITERAL:
            case FLOATING_POINT_LITERAL:
            case HEX_LITERAL:
            case OCTAL_LITERAL:
            case STRING_LITERAL:
            case 22:
            case 23:
            case 24:
            case 37:
            case 40:
            case 42:
            case 56:
            case 65:
            case 67:
            case 72:
            case 82:
            case 84:
            case 132:
            case 135:
            	{
                alt89 = 2;
                }
                break;
            case 77:
            	{
                alt89 = 3;
                }
                break;
            case 119:
            case 139:
            	{
                alt89 = 4;
                }
                break;
            case 110:
            case 116:
            case 145:
            	{
                alt89 = 5;
                }
                break;
            case 101:
            case 107:
            case 117:
            case 131:
            	{
                alt89 = 6;
                }
                break;
            case 51:
            	{
                alt89 = 7;
                }
                break;
            	default:
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d89s0 =
            	        new NoViableAltException("", 89, 0, input);

            	    throw nvae_d89s0;
            }

            switch (alt89) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:362:5: labeled_statement
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_labeled_statement_in_statement2089);
                    	labeled_statement359 = labeled_statement();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, labeled_statement359.Tree);

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:363:5: expression ';'
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_expression_in_statement2095);
                    	expression360 = expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression360.Tree);
                    	char_literal361=(IToken)Match(input,51,FOLLOW_51_in_statement2097); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal361_tree = (object)adaptor.Create(char_literal361);
                    		adaptor.AddChild(root_0, char_literal361_tree);
                    	}

                    }
                    break;
                case 3 :
                    // ObjectiveC2ansi.g:364:5: compound_statement
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_compound_statement_in_statement2103);
                    	compound_statement362 = compound_statement();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, compound_statement362.Tree);

                    }
                    break;
                case 4 :
                    // ObjectiveC2ansi.g:365:5: selection_statement
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_selection_statement_in_statement2109);
                    	selection_statement363 = selection_statement();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, selection_statement363.Tree);

                    }
                    break;
                case 5 :
                    // ObjectiveC2ansi.g:366:5: iteration_statement
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_iteration_statement_in_statement2115);
                    	iteration_statement364 = iteration_statement();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, iteration_statement364.Tree);

                    }
                    break;
                case 6 :
                    // ObjectiveC2ansi.g:367:5: jump_statement
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_jump_statement_in_statement2121);
                    	jump_statement365 = jump_statement();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, jump_statement365.Tree);

                    }
                    break;
                case 7 :
                    // ObjectiveC2ansi.g:368:5: ';'
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	char_literal366=(IToken)Match(input,51,FOLLOW_51_in_statement2127); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal366_tree = (object)adaptor.Create(char_literal366);
                    		adaptor.AddChild(root_0, char_literal366_tree);
                    	}

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "statement"

    public class labeled_statement_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "labeled_statement"
    // ObjectiveC2ansi.g:370:0: labeled_statement : ( identifier ':' statement | 'case' constant_expression ':' statement | 'default' ':' statement );
    public ObjectiveC2ansiParser.labeled_statement_return labeled_statement() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.labeled_statement_return retval = new ObjectiveC2ansiParser.labeled_statement_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal368 = null;
        IToken string_literal370 = null;
        IToken char_literal372 = null;
        IToken string_literal374 = null;
        IToken char_literal375 = null;
        ObjectiveC2ansiParser.identifier_return identifier367 = null;

        ObjectiveC2ansiParser.statement_return statement369 = null;

        ObjectiveC2ansiParser.constant_expression_return constant_expression371 = null;

        ObjectiveC2ansiParser.statement_return statement373 = null;

        ObjectiveC2ansiParser.statement_return statement376 = null;


        object char_literal368_tree=null;
        object string_literal370_tree=null;
        object char_literal372_tree=null;
        object string_literal374_tree=null;
        object char_literal375_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:371:5: ( identifier ':' statement | 'case' constant_expression ':' statement | 'default' ':' statement )
            int alt90 = 3;
            switch ( input.LA(1) ) 
            {
            case IDENTIFIER:
            	{
                alt90 = 1;
                }
                break;
            case 104:
            	{
                alt90 = 2;
                }
                break;
            case 109:
            	{
                alt90 = 3;
                }
                break;
            	default:
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d90s0 =
            	        new NoViableAltException("", 90, 0, input);

            	    throw nvae_d90s0;
            }

            switch (alt90) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:371:5: identifier ':' statement
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_identifier_in_labeled_statement2138);
                    	identifier367 = identifier();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, identifier367.Tree);
                    	char_literal368=(IToken)Match(input,50,FOLLOW_50_in_labeled_statement2140); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal368_tree = (object)adaptor.Create(char_literal368);
                    		adaptor.AddChild(root_0, char_literal368_tree);
                    	}
                    	PushFollow(FOLLOW_statement_in_labeled_statement2142);
                    	statement369 = statement();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, statement369.Tree);

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:372:5: 'case' constant_expression ':' statement
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal370=(IToken)Match(input,104,FOLLOW_104_in_labeled_statement2148); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal370_tree = (object)adaptor.Create(string_literal370);
                    		adaptor.AddChild(root_0, string_literal370_tree);
                    	}
                    	PushFollow(FOLLOW_constant_expression_in_labeled_statement2150);
                    	constant_expression371 = constant_expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, constant_expression371.Tree);
                    	char_literal372=(IToken)Match(input,50,FOLLOW_50_in_labeled_statement2152); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal372_tree = (object)adaptor.Create(char_literal372);
                    		adaptor.AddChild(root_0, char_literal372_tree);
                    	}
                    	PushFollow(FOLLOW_statement_in_labeled_statement2154);
                    	statement373 = statement();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, statement373.Tree);

                    }
                    break;
                case 3 :
                    // ObjectiveC2ansi.g:373:5: 'default' ':' statement
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	string_literal374=(IToken)Match(input,109,FOLLOW_109_in_labeled_statement2160); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal374_tree = (object)adaptor.Create(string_literal374);
                    		adaptor.AddChild(root_0, string_literal374_tree);
                    	}
                    	char_literal375=(IToken)Match(input,50,FOLLOW_50_in_labeled_statement2162); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal375_tree = (object)adaptor.Create(char_literal375);
                    		adaptor.AddChild(root_0, char_literal375_tree);
                    	}
                    	PushFollow(FOLLOW_statement_in_labeled_statement2164);
                    	statement376 = statement();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, statement376.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "labeled_statement"

    public class compound_statement_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "compound_statement"
    // ObjectiveC2ansi.g:375:0: compound_statement : '{' ( declaration )* ( statement_list )? '}' ;
    public ObjectiveC2ansiParser.compound_statement_return compound_statement() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.compound_statement_return retval = new ObjectiveC2ansiParser.compound_statement_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal377 = null;
        IToken char_literal380 = null;
        ObjectiveC2ansiParser.declaration_return declaration378 = null;

        ObjectiveC2ansiParser.statement_list_return statement_list379 = null;


        object char_literal377_tree=null;
        object char_literal380_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:375:22: ( '{' ( declaration )* ( statement_list )? '}' )
            // ObjectiveC2ansi.g:375:22: '{' ( declaration )* ( statement_list )? '}'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	char_literal377=(IToken)Match(input,77,FOLLOW_77_in_compound_statement2173); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal377_tree = (object)adaptor.Create(char_literal377);
            		adaptor.AddChild(root_0, char_literal377_tree);
            	}
            	// ObjectiveC2ansi.g:375:26: ( declaration )*
            	do 
            	{
            	    int alt91 = 2;
            	    alt91 = dfa91.Predict(input);
            	    switch (alt91) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:375:27: declaration
            			    {

            			    	PushFollow(FOLLOW_declaration_in_compound_statement2176);
            			    	declaration378 = declaration();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, declaration378.Tree);

            			    }
            			    break;

            			default:
            			    goto loop91;
            	    }
            	} while (true);

            	loop91:
            		;	// Stops C# compiler whining that label 'loop91' has no statements

            	// ObjectiveC2ansi.g:375:41: ( statement_list )?
            	int alt92 = 2;
            	int LA92_0 = input.LA(1);

            	if ( (LA92_0 == CHARACTER_LITERAL || LA92_0 == DECIMAL_LITERAL || LA92_0 == FLOATING_POINT_LITERAL || LA92_0 == HEX_LITERAL || LA92_0 == IDENTIFIER || LA92_0 == OCTAL_LITERAL || LA92_0 == STRING_LITERAL || (LA92_0 >= 22 && LA92_0 <= 24) || LA92_0 == 37 || LA92_0 == 40 || LA92_0 == 42 || LA92_0 == 51 || LA92_0 == 56 || LA92_0 == 65 || LA92_0 == 67 || LA92_0 == 72 || LA92_0 == 77 || LA92_0 == 82 || LA92_0 == 84 || LA92_0 == 101 || LA92_0 == 104 || LA92_0 == 107 || (LA92_0 >= 109 && LA92_0 <= 110) || (LA92_0 >= 116 && LA92_0 <= 117) || LA92_0 == 119 || (LA92_0 >= 131 && LA92_0 <= 132) || LA92_0 == 135 || LA92_0 == 139 || LA92_0 == 145) )
            	{
            	    alt92 = 1;
            	}
            	switch (alt92) 
            	{
            	    case 1 :
            	        // ObjectiveC2ansi.g:0:0: statement_list
            	        {

            	        	PushFollow(FOLLOW_statement_list_in_compound_statement2180);
            	        	statement_list379 = statement_list();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, statement_list379.Tree);

            	        }
            	        break;

            	}

            	char_literal380=(IToken)Match(input,81,FOLLOW_81_in_compound_statement2183); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal380_tree = (object)adaptor.Create(char_literal380);
            		adaptor.AddChild(root_0, char_literal380_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "compound_statement"

    public class selection_statement_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "selection_statement"
    // ObjectiveC2ansi.g:377:0: selection_statement : ( 'if' '(' expression ')' statement ( 'else' statement )? | 'switch' '(' expression ')' statement );
    public ObjectiveC2ansiParser.selection_statement_return selection_statement() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.selection_statement_return retval = new ObjectiveC2ansiParser.selection_statement_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal381 = null;
        IToken char_literal382 = null;
        IToken char_literal384 = null;
        IToken string_literal386 = null;
        IToken string_literal388 = null;
        IToken char_literal389 = null;
        IToken char_literal391 = null;
        ObjectiveC2ansiParser.expression_return expression383 = null;

        ObjectiveC2ansiParser.statement_return statement385 = null;

        ObjectiveC2ansiParser.statement_return statement387 = null;

        ObjectiveC2ansiParser.expression_return expression390 = null;

        ObjectiveC2ansiParser.statement_return statement392 = null;


        object string_literal381_tree=null;
        object char_literal382_tree=null;
        object char_literal384_tree=null;
        object string_literal386_tree=null;
        object string_literal388_tree=null;
        object char_literal389_tree=null;
        object char_literal391_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:378:5: ( 'if' '(' expression ')' statement ( 'else' statement )? | 'switch' '(' expression ')' statement )
            int alt94 = 2;
            int LA94_0 = input.LA(1);

            if ( (LA94_0 == 119) )
            {
                alt94 = 1;
            }
            else if ( (LA94_0 == 139) )
            {
                alt94 = 2;
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                NoViableAltException nvae_d94s0 =
                    new NoViableAltException("", 94, 0, input);

                throw nvae_d94s0;
            }
            switch (alt94) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:378:5: 'if' '(' expression ')' statement ( 'else' statement )?
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal381=(IToken)Match(input,119,FOLLOW_119_in_selection_statement2194); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal381_tree = (object)adaptor.Create(string_literal381);
                    		adaptor.AddChild(root_0, string_literal381_tree);
                    	}
                    	char_literal382=(IToken)Match(input,40,FOLLOW_40_in_selection_statement2196); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal382_tree = (object)adaptor.Create(char_literal382);
                    		adaptor.AddChild(root_0, char_literal382_tree);
                    	}
                    	PushFollow(FOLLOW_expression_in_selection_statement2198);
                    	expression383 = expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression383.Tree);
                    	char_literal384=(IToken)Match(input,41,FOLLOW_41_in_selection_statement2200); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal384_tree = (object)adaptor.Create(char_literal384);
                    		adaptor.AddChild(root_0, char_literal384_tree);
                    	}
                    	PushFollow(FOLLOW_statement_in_selection_statement2202);
                    	statement385 = statement();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, statement385.Tree);
                    	// ObjectiveC2ansi.g:378:39: ( 'else' statement )?
                    	int alt93 = 2;
                    	int LA93_0 = input.LA(1);

                    	if ( (LA93_0 == 112) )
                    	{
                    	    int LA93_1 = input.LA(2);

                    	    if ( (synpred178_ObjectiveC2ansi()) )
                    	    {
                    	        alt93 = 1;
                    	    }
                    	}
                    	switch (alt93) 
                    	{
                    	    case 1 :
                    	        // ObjectiveC2ansi.g:378:40: 'else' statement
                    	        {

                    	        	string_literal386=(IToken)Match(input,112,FOLLOW_112_in_selection_statement2205); if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 )
                    	        	{string_literal386_tree = (object)adaptor.Create(string_literal386);
                    	        		adaptor.AddChild(root_0, string_literal386_tree);
                    	        	}
                    	        	PushFollow(FOLLOW_statement_in_selection_statement2207);
                    	        	statement387 = statement();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, statement387.Tree);

                    	        }
                    	        break;

                    	}


                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:379:5: 'switch' '(' expression ')' statement
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	string_literal388=(IToken)Match(input,139,FOLLOW_139_in_selection_statement2215); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal388_tree = (object)adaptor.Create(string_literal388);
                    		adaptor.AddChild(root_0, string_literal388_tree);
                    	}
                    	char_literal389=(IToken)Match(input,40,FOLLOW_40_in_selection_statement2217); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal389_tree = (object)adaptor.Create(char_literal389);
                    		adaptor.AddChild(root_0, char_literal389_tree);
                    	}
                    	PushFollow(FOLLOW_expression_in_selection_statement2219);
                    	expression390 = expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression390.Tree);
                    	char_literal391=(IToken)Match(input,41,FOLLOW_41_in_selection_statement2221); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal391_tree = (object)adaptor.Create(char_literal391);
                    		adaptor.AddChild(root_0, char_literal391_tree);
                    	}
                    	PushFollow(FOLLOW_statement_in_selection_statement2223);
                    	statement392 = statement();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, statement392.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "selection_statement"

    public class iteration_statement_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "iteration_statement"
    // ObjectiveC2ansi.g:381:0: iteration_statement : ( 'while' '(' expression ')' statement | 'do' statement 'while' '(' expression ')' ';' | 'for' '(' ( expression )? ';' ( expression )? ';' ( expression )? ')' statement );
    public ObjectiveC2ansiParser.iteration_statement_return iteration_statement() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.iteration_statement_return retval = new ObjectiveC2ansiParser.iteration_statement_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal393 = null;
        IToken char_literal394 = null;
        IToken char_literal396 = null;
        IToken string_literal398 = null;
        IToken string_literal400 = null;
        IToken char_literal401 = null;
        IToken char_literal403 = null;
        IToken char_literal404 = null;
        IToken string_literal405 = null;
        IToken char_literal406 = null;
        IToken char_literal408 = null;
        IToken char_literal410 = null;
        IToken char_literal412 = null;
        ObjectiveC2ansiParser.expression_return expression395 = null;

        ObjectiveC2ansiParser.statement_return statement397 = null;

        ObjectiveC2ansiParser.statement_return statement399 = null;

        ObjectiveC2ansiParser.expression_return expression402 = null;

        ObjectiveC2ansiParser.expression_return expression407 = null;

        ObjectiveC2ansiParser.expression_return expression409 = null;

        ObjectiveC2ansiParser.expression_return expression411 = null;

        ObjectiveC2ansiParser.statement_return statement413 = null;


        object string_literal393_tree=null;
        object char_literal394_tree=null;
        object char_literal396_tree=null;
        object string_literal398_tree=null;
        object string_literal400_tree=null;
        object char_literal401_tree=null;
        object char_literal403_tree=null;
        object char_literal404_tree=null;
        object string_literal405_tree=null;
        object char_literal406_tree=null;
        object char_literal408_tree=null;
        object char_literal410_tree=null;
        object char_literal412_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:382:5: ( 'while' '(' expression ')' statement | 'do' statement 'while' '(' expression ')' ';' | 'for' '(' ( expression )? ';' ( expression )? ';' ( expression )? ')' statement )
            int alt98 = 3;
            switch ( input.LA(1) ) 
            {
            case 145:
            	{
                alt98 = 1;
                }
                break;
            case 110:
            	{
                alt98 = 2;
                }
                break;
            case 116:
            	{
                alt98 = 3;
                }
                break;
            	default:
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d98s0 =
            	        new NoViableAltException("", 98, 0, input);

            	    throw nvae_d98s0;
            }

            switch (alt98) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:382:5: 'while' '(' expression ')' statement
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal393=(IToken)Match(input,145,FOLLOW_145_in_iteration_statement2234); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal393_tree = (object)adaptor.Create(string_literal393);
                    		adaptor.AddChild(root_0, string_literal393_tree);
                    	}
                    	char_literal394=(IToken)Match(input,40,FOLLOW_40_in_iteration_statement2236); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal394_tree = (object)adaptor.Create(char_literal394);
                    		adaptor.AddChild(root_0, char_literal394_tree);
                    	}
                    	PushFollow(FOLLOW_expression_in_iteration_statement2238);
                    	expression395 = expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression395.Tree);
                    	char_literal396=(IToken)Match(input,41,FOLLOW_41_in_iteration_statement2240); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal396_tree = (object)adaptor.Create(char_literal396);
                    		adaptor.AddChild(root_0, char_literal396_tree);
                    	}
                    	PushFollow(FOLLOW_statement_in_iteration_statement2242);
                    	statement397 = statement();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, statement397.Tree);

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:383:5: 'do' statement 'while' '(' expression ')' ';'
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal398=(IToken)Match(input,110,FOLLOW_110_in_iteration_statement2248); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal398_tree = (object)adaptor.Create(string_literal398);
                    		adaptor.AddChild(root_0, string_literal398_tree);
                    	}
                    	PushFollow(FOLLOW_statement_in_iteration_statement2250);
                    	statement399 = statement();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, statement399.Tree);
                    	string_literal400=(IToken)Match(input,145,FOLLOW_145_in_iteration_statement2252); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal400_tree = (object)adaptor.Create(string_literal400);
                    		adaptor.AddChild(root_0, string_literal400_tree);
                    	}
                    	char_literal401=(IToken)Match(input,40,FOLLOW_40_in_iteration_statement2254); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal401_tree = (object)adaptor.Create(char_literal401);
                    		adaptor.AddChild(root_0, char_literal401_tree);
                    	}
                    	PushFollow(FOLLOW_expression_in_iteration_statement2256);
                    	expression402 = expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression402.Tree);
                    	char_literal403=(IToken)Match(input,41,FOLLOW_41_in_iteration_statement2258); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal403_tree = (object)adaptor.Create(char_literal403);
                    		adaptor.AddChild(root_0, char_literal403_tree);
                    	}
                    	char_literal404=(IToken)Match(input,51,FOLLOW_51_in_iteration_statement2260); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal404_tree = (object)adaptor.Create(char_literal404);
                    		adaptor.AddChild(root_0, char_literal404_tree);
                    	}

                    }
                    break;
                case 3 :
                    // ObjectiveC2ansi.g:384:5: 'for' '(' ( expression )? ';' ( expression )? ';' ( expression )? ')' statement
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	string_literal405=(IToken)Match(input,116,FOLLOW_116_in_iteration_statement2266); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal405_tree = (object)adaptor.Create(string_literal405);
                    		adaptor.AddChild(root_0, string_literal405_tree);
                    	}
                    	char_literal406=(IToken)Match(input,40,FOLLOW_40_in_iteration_statement2268); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal406_tree = (object)adaptor.Create(char_literal406);
                    		adaptor.AddChild(root_0, char_literal406_tree);
                    	}
                    	// ObjectiveC2ansi.g:384:15: ( expression )?
                    	int alt95 = 2;
                    	int LA95_0 = input.LA(1);

                    	if ( (LA95_0 == CHARACTER_LITERAL || LA95_0 == DECIMAL_LITERAL || LA95_0 == FLOATING_POINT_LITERAL || LA95_0 == HEX_LITERAL || LA95_0 == IDENTIFIER || LA95_0 == OCTAL_LITERAL || LA95_0 == STRING_LITERAL || (LA95_0 >= 22 && LA95_0 <= 24) || LA95_0 == 37 || LA95_0 == 40 || LA95_0 == 42 || LA95_0 == 56 || LA95_0 == 65 || LA95_0 == 67 || LA95_0 == 72 || LA95_0 == 82 || LA95_0 == 84 || LA95_0 == 132 || LA95_0 == 135) )
                    	{
                    	    alt95 = 1;
                    	}
                    	switch (alt95) 
                    	{
                    	    case 1 :
                    	        // ObjectiveC2ansi.g:0:0: expression
                    	        {

                    	        	PushFollow(FOLLOW_expression_in_iteration_statement2270);
                    	        	expression407 = expression();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression407.Tree);

                    	        }
                    	        break;

                    	}

                    	char_literal408=(IToken)Match(input,51,FOLLOW_51_in_iteration_statement2273); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal408_tree = (object)adaptor.Create(char_literal408);
                    		adaptor.AddChild(root_0, char_literal408_tree);
                    	}
                    	// ObjectiveC2ansi.g:384:31: ( expression )?
                    	int alt96 = 2;
                    	int LA96_0 = input.LA(1);

                    	if ( (LA96_0 == CHARACTER_LITERAL || LA96_0 == DECIMAL_LITERAL || LA96_0 == FLOATING_POINT_LITERAL || LA96_0 == HEX_LITERAL || LA96_0 == IDENTIFIER || LA96_0 == OCTAL_LITERAL || LA96_0 == STRING_LITERAL || (LA96_0 >= 22 && LA96_0 <= 24) || LA96_0 == 37 || LA96_0 == 40 || LA96_0 == 42 || LA96_0 == 56 || LA96_0 == 65 || LA96_0 == 67 || LA96_0 == 72 || LA96_0 == 82 || LA96_0 == 84 || LA96_0 == 132 || LA96_0 == 135) )
                    	{
                    	    alt96 = 1;
                    	}
                    	switch (alt96) 
                    	{
                    	    case 1 :
                    	        // ObjectiveC2ansi.g:0:0: expression
                    	        {

                    	        	PushFollow(FOLLOW_expression_in_iteration_statement2275);
                    	        	expression409 = expression();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression409.Tree);

                    	        }
                    	        break;

                    	}

                    	char_literal410=(IToken)Match(input,51,FOLLOW_51_in_iteration_statement2278); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal410_tree = (object)adaptor.Create(char_literal410);
                    		adaptor.AddChild(root_0, char_literal410_tree);
                    	}
                    	// ObjectiveC2ansi.g:384:47: ( expression )?
                    	int alt97 = 2;
                    	int LA97_0 = input.LA(1);

                    	if ( (LA97_0 == CHARACTER_LITERAL || LA97_0 == DECIMAL_LITERAL || LA97_0 == FLOATING_POINT_LITERAL || LA97_0 == HEX_LITERAL || LA97_0 == IDENTIFIER || LA97_0 == OCTAL_LITERAL || LA97_0 == STRING_LITERAL || (LA97_0 >= 22 && LA97_0 <= 24) || LA97_0 == 37 || LA97_0 == 40 || LA97_0 == 42 || LA97_0 == 56 || LA97_0 == 65 || LA97_0 == 67 || LA97_0 == 72 || LA97_0 == 82 || LA97_0 == 84 || LA97_0 == 132 || LA97_0 == 135) )
                    	{
                    	    alt97 = 1;
                    	}
                    	switch (alt97) 
                    	{
                    	    case 1 :
                    	        // ObjectiveC2ansi.g:0:0: expression
                    	        {

                    	        	PushFollow(FOLLOW_expression_in_iteration_statement2280);
                    	        	expression411 = expression();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression411.Tree);

                    	        }
                    	        break;

                    	}

                    	char_literal412=(IToken)Match(input,41,FOLLOW_41_in_iteration_statement2283); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal412_tree = (object)adaptor.Create(char_literal412);
                    		adaptor.AddChild(root_0, char_literal412_tree);
                    	}
                    	PushFollow(FOLLOW_statement_in_iteration_statement2285);
                    	statement413 = statement();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, statement413.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "iteration_statement"

    public class jump_statement_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "jump_statement"
    // ObjectiveC2ansi.g:386:0: jump_statement : ( 'goto' identifier ';' | 'continue' ';' | 'break' ';' | 'return' ( expression )? ';' );
    public ObjectiveC2ansiParser.jump_statement_return jump_statement() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.jump_statement_return retval = new ObjectiveC2ansiParser.jump_statement_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal414 = null;
        IToken char_literal416 = null;
        IToken string_literal417 = null;
        IToken char_literal418 = null;
        IToken string_literal419 = null;
        IToken char_literal420 = null;
        IToken string_literal421 = null;
        IToken char_literal423 = null;
        ObjectiveC2ansiParser.identifier_return identifier415 = null;

        ObjectiveC2ansiParser.expression_return expression422 = null;


        object string_literal414_tree=null;
        object char_literal416_tree=null;
        object string_literal417_tree=null;
        object char_literal418_tree=null;
        object string_literal419_tree=null;
        object char_literal420_tree=null;
        object string_literal421_tree=null;
        object char_literal423_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:387:5: ( 'goto' identifier ';' | 'continue' ';' | 'break' ';' | 'return' ( expression )? ';' )
            int alt100 = 4;
            switch ( input.LA(1) ) 
            {
            case 117:
            	{
                alt100 = 1;
                }
                break;
            case 107:
            	{
                alt100 = 2;
                }
                break;
            case 101:
            	{
                alt100 = 3;
                }
                break;
            case 131:
            	{
                alt100 = 4;
                }
                break;
            	default:
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d100s0 =
            	        new NoViableAltException("", 100, 0, input);

            	    throw nvae_d100s0;
            }

            switch (alt100) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:387:5: 'goto' identifier ';'
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal414=(IToken)Match(input,117,FOLLOW_117_in_jump_statement2296); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal414_tree = (object)adaptor.Create(string_literal414);
                    		adaptor.AddChild(root_0, string_literal414_tree);
                    	}
                    	PushFollow(FOLLOW_identifier_in_jump_statement2298);
                    	identifier415 = identifier();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, identifier415.Tree);
                    	char_literal416=(IToken)Match(input,51,FOLLOW_51_in_jump_statement2300); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal416_tree = (object)adaptor.Create(char_literal416);
                    		adaptor.AddChild(root_0, char_literal416_tree);
                    	}

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:388:5: 'continue' ';'
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal417=(IToken)Match(input,107,FOLLOW_107_in_jump_statement2306); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal417_tree = (object)adaptor.Create(string_literal417);
                    		adaptor.AddChild(root_0, string_literal417_tree);
                    	}
                    	char_literal418=(IToken)Match(input,51,FOLLOW_51_in_jump_statement2308); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal418_tree = (object)adaptor.Create(char_literal418);
                    		adaptor.AddChild(root_0, char_literal418_tree);
                    	}

                    }
                    break;
                case 3 :
                    // ObjectiveC2ansi.g:389:5: 'break' ';'
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal419=(IToken)Match(input,101,FOLLOW_101_in_jump_statement2314); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal419_tree = (object)adaptor.Create(string_literal419);
                    		adaptor.AddChild(root_0, string_literal419_tree);
                    	}
                    	char_literal420=(IToken)Match(input,51,FOLLOW_51_in_jump_statement2316); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal420_tree = (object)adaptor.Create(char_literal420);
                    		adaptor.AddChild(root_0, char_literal420_tree);
                    	}

                    }
                    break;
                case 4 :
                    // ObjectiveC2ansi.g:390:5: 'return' ( expression )? ';'
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	string_literal421=(IToken)Match(input,131,FOLLOW_131_in_jump_statement2322); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal421_tree = (object)adaptor.Create(string_literal421);
                    		adaptor.AddChild(root_0, string_literal421_tree);
                    	}
                    	// ObjectiveC2ansi.g:390:14: ( expression )?
                    	int alt99 = 2;
                    	int LA99_0 = input.LA(1);

                    	if ( (LA99_0 == CHARACTER_LITERAL || LA99_0 == DECIMAL_LITERAL || LA99_0 == FLOATING_POINT_LITERAL || LA99_0 == HEX_LITERAL || LA99_0 == IDENTIFIER || LA99_0 == OCTAL_LITERAL || LA99_0 == STRING_LITERAL || (LA99_0 >= 22 && LA99_0 <= 24) || LA99_0 == 37 || LA99_0 == 40 || LA99_0 == 42 || LA99_0 == 56 || LA99_0 == 65 || LA99_0 == 67 || LA99_0 == 72 || LA99_0 == 82 || LA99_0 == 84 || LA99_0 == 132 || LA99_0 == 135) )
                    	{
                    	    alt99 = 1;
                    	}
                    	switch (alt99) 
                    	{
                    	    case 1 :
                    	        // ObjectiveC2ansi.g:0:0: expression
                    	        {

                    	        	PushFollow(FOLLOW_expression_in_jump_statement2324);
                    	        	expression422 = expression();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression422.Tree);

                    	        }
                    	        break;

                    	}

                    	char_literal423=(IToken)Match(input,51,FOLLOW_51_in_jump_statement2327); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal423_tree = (object)adaptor.Create(char_literal423);
                    		adaptor.AddChild(root_0, char_literal423_tree);
                    	}

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "jump_statement"

    public class expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "expression"
    // ObjectiveC2ansi.g:393:0: expression : assignment_expression ( ',' assignment_expression )* ;
    public ObjectiveC2ansiParser.expression_return expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.expression_return retval = new ObjectiveC2ansiParser.expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal425 = null;
        ObjectiveC2ansiParser.assignment_expression_return assignment_expression424 = null;

        ObjectiveC2ansiParser.assignment_expression_return assignment_expression426 = null;


        object char_literal425_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:393:14: ( assignment_expression ( ',' assignment_expression )* )
            // ObjectiveC2ansi.g:393:14: assignment_expression ( ',' assignment_expression )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_assignment_expression_in_expression2339);
            	assignment_expression424 = assignment_expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, assignment_expression424.Tree);
            	// ObjectiveC2ansi.g:393:36: ( ',' assignment_expression )*
            	do 
            	{
            	    int alt101 = 2;
            	    int LA101_0 = input.LA(1);

            	    if ( (LA101_0 == 44) )
            	    {
            	        alt101 = 1;
            	    }


            	    switch (alt101) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:393:37: ',' assignment_expression
            			    {

            			    	char_literal425=(IToken)Match(input,44,FOLLOW_44_in_expression2342); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal425_tree = (object)adaptor.Create(char_literal425);
            			    		adaptor.AddChild(root_0, char_literal425_tree);
            			    	}
            			    	PushFollow(FOLLOW_assignment_expression_in_expression2344);
            			    	assignment_expression426 = assignment_expression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, assignment_expression426.Tree);

            			    }
            			    break;

            			default:
            			    goto loop101;
            	    }
            	} while (true);

            	loop101:
            		;	// Stops C# compiler whining that label 'loop101' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "expression"

    public class assignment_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "assignment_expression"
    // ObjectiveC2ansi.g:395:0: assignment_expression : conditional_expression ( assignment_operator assignment_expression )? ;
    public ObjectiveC2ansiParser.assignment_expression_return assignment_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.assignment_expression_return retval = new ObjectiveC2ansiParser.assignment_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        ObjectiveC2ansiParser.conditional_expression_return conditional_expression427 = null;

        ObjectiveC2ansiParser.assignment_operator_return assignment_operator428 = null;

        ObjectiveC2ansiParser.assignment_expression_return assignment_expression429 = null;



        try 
    	{
            // ObjectiveC2ansi.g:395:25: ( conditional_expression ( assignment_operator assignment_expression )? )
            // ObjectiveC2ansi.g:395:25: conditional_expression ( assignment_operator assignment_expression )?
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_conditional_expression_in_assignment_expression2355);
            	conditional_expression427 = conditional_expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, conditional_expression427.Tree);
            	// ObjectiveC2ansi.g:396:3: ( assignment_operator assignment_expression )?
            	int alt102 = 2;
            	int LA102_0 = input.LA(1);

            	if ( (LA102_0 == 36 || LA102_0 == 39 || LA102_0 == 43 || LA102_0 == 49 || LA102_0 == 76 || LA102_0 == 80 || LA102_0 == 85 || LA102_0 == 88 || (LA102_0 >= 90 && LA102_0 <= 91) || LA102_0 == 97) )
            	{
            	    alt102 = 1;
            	}
            	switch (alt102) 
            	{
            	    case 1 :
            	        // ObjectiveC2ansi.g:396:5: assignment_operator assignment_expression
            	        {

            	        	PushFollow(FOLLOW_assignment_operator_in_assignment_expression2362);
            	        	assignment_operator428 = assignment_operator();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, assignment_operator428.Tree);
            	        	PushFollow(FOLLOW_assignment_expression_in_assignment_expression2364);
            	        	assignment_expression429 = assignment_expression();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, assignment_expression429.Tree);

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "assignment_expression"

    public class assignment_operator_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "assignment_operator"
    // ObjectiveC2ansi.g:397:0: assignment_operator : ( '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '&=' | '^=' | '|=' );
    public ObjectiveC2ansiParser.assignment_operator_return assignment_operator() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.assignment_operator_return retval = new ObjectiveC2ansiParser.assignment_operator_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken set430 = null;

        object set430_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:398:3: ( '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '&=' | '^=' | '|=' )
            // ObjectiveC2ansi.g:
            {
            	root_0 = (object)adaptor.GetNilNode();

            	set430 = (IToken)input.LT(1);
            	if ( input.LA(1) == 36 || input.LA(1) == 39 || input.LA(1) == 43 || input.LA(1) == 49 || input.LA(1) == 76 || input.LA(1) == 80 || input.LA(1) == 85 || input.LA(1) == 88 || (input.LA(1) >= 90 && input.LA(1) <= 91) || input.LA(1) == 97 ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set430));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "assignment_operator"

    public class conditional_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "conditional_expression"
    // ObjectiveC2ansi.g:400:0: conditional_expression : logical_or_expression ( '?' logical_or_expression ':' logical_or_expression )? ;
    public ObjectiveC2ansiParser.conditional_expression_return conditional_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.conditional_expression_return retval = new ObjectiveC2ansiParser.conditional_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal432 = null;
        IToken char_literal434 = null;
        ObjectiveC2ansiParser.logical_or_expression_return logical_or_expression431 = null;

        ObjectiveC2ansiParser.logical_or_expression_return logical_or_expression433 = null;

        ObjectiveC2ansiParser.logical_or_expression_return logical_or_expression435 = null;


        object char_literal432_tree=null;
        object char_literal434_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:400:26: ( logical_or_expression ( '?' logical_or_expression ':' logical_or_expression )? )
            // ObjectiveC2ansi.g:400:26: logical_or_expression ( '?' logical_or_expression ':' logical_or_expression )?
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_logical_or_expression_in_conditional_expression2424);
            	logical_or_expression431 = logical_or_expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, logical_or_expression431.Tree);
            	// ObjectiveC2ansi.g:401:3: ( '?' logical_or_expression ':' logical_or_expression )?
            	int alt103 = 2;
            	int LA103_0 = input.LA(1);

            	if ( (LA103_0 == 52) )
            	{
            	    alt103 = 1;
            	}
            	switch (alt103) 
            	{
            	    case 1 :
            	        // ObjectiveC2ansi.g:401:4: '?' logical_or_expression ':' logical_or_expression
            	        {

            	        	char_literal432=(IToken)Match(input,52,FOLLOW_52_in_conditional_expression2430); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{char_literal432_tree = (object)adaptor.Create(char_literal432);
            	        		adaptor.AddChild(root_0, char_literal432_tree);
            	        	}
            	        	PushFollow(FOLLOW_logical_or_expression_in_conditional_expression2432);
            	        	logical_or_expression433 = logical_or_expression();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, logical_or_expression433.Tree);
            	        	char_literal434=(IToken)Match(input,50,FOLLOW_50_in_conditional_expression2434); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{char_literal434_tree = (object)adaptor.Create(char_literal434);
            	        		adaptor.AddChild(root_0, char_literal434_tree);
            	        	}
            	        	PushFollow(FOLLOW_logical_or_expression_in_conditional_expression2436);
            	        	logical_or_expression435 = logical_or_expression();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, logical_or_expression435.Tree);

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "conditional_expression"

    public class constant_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "constant_expression"
    // ObjectiveC2ansi.g:403:0: constant_expression : conditional_expression ;
    public ObjectiveC2ansiParser.constant_expression_return constant_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.constant_expression_return retval = new ObjectiveC2ansiParser.constant_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        ObjectiveC2ansiParser.conditional_expression_return conditional_expression436 = null;



        try 
    	{
            // ObjectiveC2ansi.g:403:23: ( conditional_expression )
            // ObjectiveC2ansi.g:403:23: conditional_expression
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_conditional_expression_in_constant_expression2447);
            	conditional_expression436 = conditional_expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, conditional_expression436.Tree);

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "constant_expression"

    public class logical_or_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "logical_or_expression"
    // ObjectiveC2ansi.g:405:0: logical_or_expression : logical_and_expression ( '||' logical_and_expression )* ;
    public ObjectiveC2ansiParser.logical_or_expression_return logical_or_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.logical_or_expression_return retval = new ObjectiveC2ansiParser.logical_or_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal438 = null;
        ObjectiveC2ansiParser.logical_and_expression_return logical_and_expression437 = null;

        ObjectiveC2ansiParser.logical_and_expression_return logical_and_expression439 = null;


        object string_literal438_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:405:25: ( logical_and_expression ( '||' logical_and_expression )* )
            // ObjectiveC2ansi.g:405:25: logical_and_expression ( '||' logical_and_expression )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_logical_and_expression_in_logical_or_expression2456);
            	logical_and_expression437 = logical_and_expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, logical_and_expression437.Tree);
            	// ObjectiveC2ansi.g:406:3: ( '||' logical_and_expression )*
            	do 
            	{
            	    int alt104 = 2;
            	    int LA104_0 = input.LA(1);

            	    if ( (LA104_0 == 79) )
            	    {
            	        alt104 = 1;
            	    }


            	    switch (alt104) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:406:4: '||' logical_and_expression
            			    {

            			    	string_literal438=(IToken)Match(input,79,FOLLOW_79_in_logical_or_expression2462); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{string_literal438_tree = (object)adaptor.Create(string_literal438);
            			    		adaptor.AddChild(root_0, string_literal438_tree);
            			    	}
            			    	PushFollow(FOLLOW_logical_and_expression_in_logical_or_expression2464);
            			    	logical_and_expression439 = logical_and_expression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, logical_and_expression439.Tree);

            			    }
            			    break;

            			default:
            			    goto loop104;
            	    }
            	} while (true);

            	loop104:
            		;	// Stops C# compiler whining that label 'loop104' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "logical_or_expression"

    public class logical_and_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "logical_and_expression"
    // ObjectiveC2ansi.g:408:0: logical_and_expression : inclusive_or_expression ( '&&' inclusive_or_expression )* ;
    public ObjectiveC2ansiParser.logical_and_expression_return logical_and_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.logical_and_expression_return retval = new ObjectiveC2ansiParser.logical_and_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal441 = null;
        ObjectiveC2ansiParser.inclusive_or_expression_return inclusive_or_expression440 = null;

        ObjectiveC2ansiParser.inclusive_or_expression_return inclusive_or_expression442 = null;


        object string_literal441_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:408:26: ( inclusive_or_expression ( '&&' inclusive_or_expression )* )
            // ObjectiveC2ansi.g:408:26: inclusive_or_expression ( '&&' inclusive_or_expression )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_inclusive_or_expression_in_logical_and_expression2475);
            	inclusive_or_expression440 = inclusive_or_expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, inclusive_or_expression440.Tree);
            	// ObjectiveC2ansi.g:409:3: ( '&&' inclusive_or_expression )*
            	do 
            	{
            	    int alt105 = 2;
            	    int LA105_0 = input.LA(1);

            	    if ( (LA105_0 == 38) )
            	    {
            	        alt105 = 1;
            	    }


            	    switch (alt105) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:409:4: '&&' inclusive_or_expression
            			    {

            			    	string_literal441=(IToken)Match(input,38,FOLLOW_38_in_logical_and_expression2481); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{string_literal441_tree = (object)adaptor.Create(string_literal441);
            			    		adaptor.AddChild(root_0, string_literal441_tree);
            			    	}
            			    	PushFollow(FOLLOW_inclusive_or_expression_in_logical_and_expression2483);
            			    	inclusive_or_expression442 = inclusive_or_expression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, inclusive_or_expression442.Tree);

            			    }
            			    break;

            			default:
            			    goto loop105;
            	    }
            	} while (true);

            	loop105:
            		;	// Stops C# compiler whining that label 'loop105' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "logical_and_expression"

    public class inclusive_or_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "inclusive_or_expression"
    // ObjectiveC2ansi.g:411:0: inclusive_or_expression : exclusive_or_expression ( '|' exclusive_or_expression )* ;
    public ObjectiveC2ansiParser.inclusive_or_expression_return inclusive_or_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.inclusive_or_expression_return retval = new ObjectiveC2ansiParser.inclusive_or_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal444 = null;
        ObjectiveC2ansiParser.exclusive_or_expression_return exclusive_or_expression443 = null;

        ObjectiveC2ansiParser.exclusive_or_expression_return exclusive_or_expression445 = null;


        object char_literal444_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:411:27: ( exclusive_or_expression ( '|' exclusive_or_expression )* )
            // ObjectiveC2ansi.g:411:27: exclusive_or_expression ( '|' exclusive_or_expression )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_exclusive_or_expression_in_inclusive_or_expression2494);
            	exclusive_or_expression443 = exclusive_or_expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exclusive_or_expression443.Tree);
            	// ObjectiveC2ansi.g:412:3: ( '|' exclusive_or_expression )*
            	do 
            	{
            	    int alt106 = 2;
            	    int LA106_0 = input.LA(1);

            	    if ( (LA106_0 == 78) )
            	    {
            	        alt106 = 1;
            	    }


            	    switch (alt106) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:412:4: '|' exclusive_or_expression
            			    {

            			    	char_literal444=(IToken)Match(input,78,FOLLOW_78_in_inclusive_or_expression2500); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal444_tree = (object)adaptor.Create(char_literal444);
            			    		adaptor.AddChild(root_0, char_literal444_tree);
            			    	}
            			    	PushFollow(FOLLOW_exclusive_or_expression_in_inclusive_or_expression2502);
            			    	exclusive_or_expression445 = exclusive_or_expression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exclusive_or_expression445.Tree);

            			    }
            			    break;

            			default:
            			    goto loop106;
            	    }
            	} while (true);

            	loop106:
            		;	// Stops C# compiler whining that label 'loop106' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "inclusive_or_expression"

    public class exclusive_or_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "exclusive_or_expression"
    // ObjectiveC2ansi.g:414:0: exclusive_or_expression : and_expression ( '^' and_expression )* ;
    public ObjectiveC2ansiParser.exclusive_or_expression_return exclusive_or_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.exclusive_or_expression_return retval = new ObjectiveC2ansiParser.exclusive_or_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal447 = null;
        ObjectiveC2ansiParser.and_expression_return and_expression446 = null;

        ObjectiveC2ansiParser.and_expression_return and_expression448 = null;


        object char_literal447_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:414:27: ( and_expression ( '^' and_expression )* )
            // ObjectiveC2ansi.g:414:27: and_expression ( '^' and_expression )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_and_expression_in_exclusive_or_expression2513);
            	and_expression446 = and_expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, and_expression446.Tree);
            	// ObjectiveC2ansi.g:414:42: ( '^' and_expression )*
            	do 
            	{
            	    int alt107 = 2;
            	    int LA107_0 = input.LA(1);

            	    if ( (LA107_0 == 75) )
            	    {
            	        alt107 = 1;
            	    }


            	    switch (alt107) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:414:43: '^' and_expression
            			    {

            			    	char_literal447=(IToken)Match(input,75,FOLLOW_75_in_exclusive_or_expression2516); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal447_tree = (object)adaptor.Create(char_literal447);
            			    		adaptor.AddChild(root_0, char_literal447_tree);
            			    	}
            			    	PushFollow(FOLLOW_and_expression_in_exclusive_or_expression2518);
            			    	and_expression448 = and_expression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, and_expression448.Tree);

            			    }
            			    break;

            			default:
            			    goto loop107;
            	    }
            	} while (true);

            	loop107:
            		;	// Stops C# compiler whining that label 'loop107' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "exclusive_or_expression"

    public class and_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "and_expression"
    // ObjectiveC2ansi.g:416:0: and_expression : equality_expression ( '&' equality_expression )* ;
    public ObjectiveC2ansiParser.and_expression_return and_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.and_expression_return retval = new ObjectiveC2ansiParser.and_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal450 = null;
        ObjectiveC2ansiParser.equality_expression_return equality_expression449 = null;

        ObjectiveC2ansiParser.equality_expression_return equality_expression451 = null;


        object char_literal450_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:416:18: ( equality_expression ( '&' equality_expression )* )
            // ObjectiveC2ansi.g:416:18: equality_expression ( '&' equality_expression )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_equality_expression_in_and_expression2529);
            	equality_expression449 = equality_expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, equality_expression449.Tree);
            	// ObjectiveC2ansi.g:416:38: ( '&' equality_expression )*
            	do 
            	{
            	    int alt108 = 2;
            	    int LA108_0 = input.LA(1);

            	    if ( (LA108_0 == 37) )
            	    {
            	        alt108 = 1;
            	    }


            	    switch (alt108) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:416:39: '&' equality_expression
            			    {

            			    	char_literal450=(IToken)Match(input,37,FOLLOW_37_in_and_expression2532); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal450_tree = (object)adaptor.Create(char_literal450);
            			    		adaptor.AddChild(root_0, char_literal450_tree);
            			    	}
            			    	PushFollow(FOLLOW_equality_expression_in_and_expression2534);
            			    	equality_expression451 = equality_expression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, equality_expression451.Tree);

            			    }
            			    break;

            			default:
            			    goto loop108;
            	    }
            	} while (true);

            	loop108:
            		;	// Stops C# compiler whining that label 'loop108' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "and_expression"

    public class equality_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "equality_expression"
    // ObjectiveC2ansi.g:418:0: equality_expression : relational_expression ( ( '!=' | '==' ) relational_expression )* ;
    public ObjectiveC2ansiParser.equality_expression_return equality_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.equality_expression_return retval = new ObjectiveC2ansiParser.equality_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken set453 = null;
        ObjectiveC2ansiParser.relational_expression_return relational_expression452 = null;

        ObjectiveC2ansiParser.relational_expression_return relational_expression454 = null;


        object set453_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:418:23: ( relational_expression ( ( '!=' | '==' ) relational_expression )* )
            // ObjectiveC2ansi.g:418:23: relational_expression ( ( '!=' | '==' ) relational_expression )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_relational_expression_in_equality_expression2545);
            	relational_expression452 = relational_expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, relational_expression452.Tree);
            	// ObjectiveC2ansi.g:419:3: ( ( '!=' | '==' ) relational_expression )*
            	do 
            	{
            	    int alt109 = 2;
            	    int LA109_0 = input.LA(1);

            	    if ( (LA109_0 == 25 || LA109_0 == 92) )
            	    {
            	        alt109 = 1;
            	    }


            	    switch (alt109) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:419:4: ( '!=' | '==' ) relational_expression
            			    {

            			    	set453 = (IToken)input.LT(1);
            			    	if ( input.LA(1) == 25 || input.LA(1) == 92 ) 
            			    	{
            			    	    input.Consume();
            			    	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set453));
            			    	    state.errorRecovery = false;state.failed = false;
            			    	}
            			    	else 
            			    	{
            			    	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            			    	    MismatchedSetException mse = new MismatchedSetException(null,input);
            			    	    throw mse;
            			    	}

            			    	PushFollow(FOLLOW_relational_expression_in_equality_expression2559);
            			    	relational_expression454 = relational_expression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, relational_expression454.Tree);

            			    }
            			    break;

            			default:
            			    goto loop109;
            	    }
            	} while (true);

            	loop109:
            		;	// Stops C# compiler whining that label 'loop109' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "equality_expression"

    public class relational_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "relational_expression"
    // ObjectiveC2ansi.g:421:0: relational_expression : shift_expression ( ( '<' | '>' | '<=' | '>=' ) shift_expression )* ;
    public ObjectiveC2ansiParser.relational_expression_return relational_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.relational_expression_return retval = new ObjectiveC2ansiParser.relational_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken set456 = null;
        ObjectiveC2ansiParser.shift_expression_return shift_expression455 = null;

        ObjectiveC2ansiParser.shift_expression_return shift_expression457 = null;


        object set456_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:421:25: ( shift_expression ( ( '<' | '>' | '<=' | '>=' ) shift_expression )* )
            // ObjectiveC2ansi.g:421:25: shift_expression ( ( '<' | '>' | '<=' | '>=' ) shift_expression )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_shift_expression_in_relational_expression2570);
            	shift_expression455 = shift_expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, shift_expression455.Tree);
            	// ObjectiveC2ansi.g:422:2: ( ( '<' | '>' | '<=' | '>=' ) shift_expression )*
            	do 
            	{
            	    int alt110 = 2;
            	    int LA110_0 = input.LA(1);

            	    if ( (LA110_0 == 86 || LA110_0 == 89 || LA110_0 == 93 || LA110_0 == 95) )
            	    {
            	        alt110 = 1;
            	    }


            	    switch (alt110) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:422:3: ( '<' | '>' | '<=' | '>=' ) shift_expression
            			    {

            			    	set456 = (IToken)input.LT(1);
            			    	if ( input.LA(1) == 86 || input.LA(1) == 89 || input.LA(1) == 93 || input.LA(1) == 95 ) 
            			    	{
            			    	    input.Consume();
            			    	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set456));
            			    	    state.errorRecovery = false;state.failed = false;
            			    	}
            			    	else 
            			    	{
            			    	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            			    	    MismatchedSetException mse = new MismatchedSetException(null,input);
            			    	    throw mse;
            			    	}

            			    	PushFollow(FOLLOW_shift_expression_in_relational_expression2590);
            			    	shift_expression457 = shift_expression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, shift_expression457.Tree);

            			    }
            			    break;

            			default:
            			    goto loop110;
            	    }
            	} while (true);

            	loop110:
            		;	// Stops C# compiler whining that label 'loop110' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "relational_expression"

    public class shift_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "shift_expression"
    // ObjectiveC2ansi.g:424:0: shift_expression : additive_expression ( ( '<<' | '>>' ) additive_expression )* ;
    public ObjectiveC2ansiParser.shift_expression_return shift_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.shift_expression_return retval = new ObjectiveC2ansiParser.shift_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken set459 = null;
        ObjectiveC2ansiParser.additive_expression_return additive_expression458 = null;

        ObjectiveC2ansiParser.additive_expression_return additive_expression460 = null;


        object set459_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:424:20: ( additive_expression ( ( '<<' | '>>' ) additive_expression )* )
            // ObjectiveC2ansi.g:424:20: additive_expression ( ( '<<' | '>>' ) additive_expression )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_additive_expression_in_shift_expression2601);
            	additive_expression458 = additive_expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, additive_expression458.Tree);
            	// ObjectiveC2ansi.g:424:40: ( ( '<<' | '>>' ) additive_expression )*
            	do 
            	{
            	    int alt111 = 2;
            	    int LA111_0 = input.LA(1);

            	    if ( (LA111_0 == 87 || LA111_0 == 96) )
            	    {
            	        alt111 = 1;
            	    }


            	    switch (alt111) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:424:41: ( '<<' | '>>' ) additive_expression
            			    {

            			    	set459 = (IToken)input.LT(1);
            			    	if ( input.LA(1) == 87 || input.LA(1) == 96 ) 
            			    	{
            			    	    input.Consume();
            			    	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set459));
            			    	    state.errorRecovery = false;state.failed = false;
            			    	}
            			    	else 
            			    	{
            			    	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            			    	    MismatchedSetException mse = new MismatchedSetException(null,input);
            			    	    throw mse;
            			    	}

            			    	PushFollow(FOLLOW_additive_expression_in_shift_expression2612);
            			    	additive_expression460 = additive_expression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, additive_expression460.Tree);

            			    }
            			    break;

            			default:
            			    goto loop111;
            	    }
            	} while (true);

            	loop111:
            		;	// Stops C# compiler whining that label 'loop111' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "shift_expression"

    public class additive_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "additive_expression"
    // ObjectiveC2ansi.g:426:0: additive_expression : multiplicative_expression ( ( '+' | '-' ) multiplicative_expression )* ;
    public ObjectiveC2ansiParser.additive_expression_return additive_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.additive_expression_return retval = new ObjectiveC2ansiParser.additive_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken set462 = null;
        ObjectiveC2ansiParser.multiplicative_expression_return multiplicative_expression461 = null;

        ObjectiveC2ansiParser.multiplicative_expression_return multiplicative_expression463 = null;


        object set462_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:426:23: ( multiplicative_expression ( ( '+' | '-' ) multiplicative_expression )* )
            // ObjectiveC2ansi.g:426:23: multiplicative_expression ( ( '+' | '-' ) multiplicative_expression )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_multiplicative_expression_in_additive_expression2623);
            	multiplicative_expression461 = multiplicative_expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, multiplicative_expression461.Tree);
            	// ObjectiveC2ansi.g:427:3: ( ( '+' | '-' ) multiplicative_expression )*
            	do 
            	{
            	    int alt112 = 2;
            	    int LA112_0 = input.LA(1);

            	    if ( (LA112_0 == 22 || LA112_0 == 83) )
            	    {
            	        alt112 = 1;
            	    }


            	    switch (alt112) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:427:4: ( '+' | '-' ) multiplicative_expression
            			    {

            			    	set462 = (IToken)input.LT(1);
            			    	if ( input.LA(1) == 22 || input.LA(1) == 83 ) 
            			    	{
            			    	    input.Consume();
            			    	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set462));
            			    	    state.errorRecovery = false;state.failed = false;
            			    	}
            			    	else 
            			    	{
            			    	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            			    	    MismatchedSetException mse = new MismatchedSetException(null,input);
            			    	    throw mse;
            			    	}

            			    	PushFollow(FOLLOW_multiplicative_expression_in_additive_expression2636);
            			    	multiplicative_expression463 = multiplicative_expression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, multiplicative_expression463.Tree);

            			    }
            			    break;

            			default:
            			    goto loop112;
            	    }
            	} while (true);

            	loop112:
            		;	// Stops C# compiler whining that label 'loop112' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "additive_expression"

    public class multiplicative_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "multiplicative_expression"
    // ObjectiveC2ansi.g:429:0: multiplicative_expression : cast_expression ( ( '*' | '/' | '%' ) cast_expression )* ;
    public ObjectiveC2ansiParser.multiplicative_expression_return multiplicative_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.multiplicative_expression_return retval = new ObjectiveC2ansiParser.multiplicative_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken set465 = null;
        ObjectiveC2ansiParser.cast_expression_return cast_expression464 = null;

        ObjectiveC2ansiParser.cast_expression_return cast_expression466 = null;


        object set465_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:429:29: ( cast_expression ( ( '*' | '/' | '%' ) cast_expression )* )
            // ObjectiveC2ansi.g:429:29: cast_expression ( ( '*' | '/' | '%' ) cast_expression )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_cast_expression_in_multiplicative_expression2647);
            	cast_expression464 = cast_expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, cast_expression464.Tree);
            	// ObjectiveC2ansi.g:430:3: ( ( '*' | '/' | '%' ) cast_expression )*
            	do 
            	{
            	    int alt113 = 2;
            	    int LA113_0 = input.LA(1);

            	    if ( (LA113_0 == 35 || LA113_0 == 42 || LA113_0 == 48) )
            	    {
            	        alt113 = 1;
            	    }


            	    switch (alt113) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:430:4: ( '*' | '/' | '%' ) cast_expression
            			    {

            			    	set465 = (IToken)input.LT(1);
            			    	if ( input.LA(1) == 35 || input.LA(1) == 42 || input.LA(1) == 48 ) 
            			    	{
            			    	    input.Consume();
            			    	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set465));
            			    	    state.errorRecovery = false;state.failed = false;
            			    	}
            			    	else 
            			    	{
            			    	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            			    	    MismatchedSetException mse = new MismatchedSetException(null,input);
            			    	    throw mse;
            			    	}

            			    	PushFollow(FOLLOW_cast_expression_in_multiplicative_expression2665);
            			    	cast_expression466 = cast_expression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, cast_expression466.Tree);

            			    }
            			    break;

            			default:
            			    goto loop113;
            	    }
            	} while (true);

            	loop113:
            		;	// Stops C# compiler whining that label 'loop113' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "multiplicative_expression"

    public class cast_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "cast_expression"
    // ObjectiveC2ansi.g:432:0: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );
    public ObjectiveC2ansiParser.cast_expression_return cast_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.cast_expression_return retval = new ObjectiveC2ansiParser.cast_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal467 = null;
        IToken char_literal469 = null;
        ObjectiveC2ansiParser.type_name_return type_name468 = null;

        ObjectiveC2ansiParser.cast_expression_return cast_expression470 = null;

        ObjectiveC2ansiParser.unary_expression_return unary_expression471 = null;


        object char_literal467_tree=null;
        object char_literal469_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:432:19: ( '(' type_name ')' cast_expression | unary_expression )
            int alt114 = 2;
            alt114 = dfa114.Predict(input);
            switch (alt114) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:432:19: '(' type_name ')' cast_expression
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	char_literal467=(IToken)Match(input,40,FOLLOW_40_in_cast_expression2676); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal467_tree = (object)adaptor.Create(char_literal467);
                    		adaptor.AddChild(root_0, char_literal467_tree);
                    	}
                    	PushFollow(FOLLOW_type_name_in_cast_expression2678);
                    	type_name468 = type_name();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, type_name468.Tree);
                    	char_literal469=(IToken)Match(input,41,FOLLOW_41_in_cast_expression2680); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal469_tree = (object)adaptor.Create(char_literal469);
                    		adaptor.AddChild(root_0, char_literal469_tree);
                    	}
                    	PushFollow(FOLLOW_cast_expression_in_cast_expression2682);
                    	cast_expression470 = cast_expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, cast_expression470.Tree);

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:432:55: unary_expression
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_unary_expression_in_cast_expression2686);
                    	unary_expression471 = unary_expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, unary_expression471.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "cast_expression"

    public class unary_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "unary_expression"
    // ObjectiveC2ansi.g:434:0: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' ( '(' type_name ')' | unary_expression ) );
    public ObjectiveC2ansiParser.unary_expression_return unary_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.unary_expression_return retval = new ObjectiveC2ansiParser.unary_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal473 = null;
        IToken string_literal475 = null;
        IToken string_literal479 = null;
        IToken char_literal480 = null;
        IToken char_literal482 = null;
        ObjectiveC2ansiParser.postfix_expression_return postfix_expression472 = null;

        ObjectiveC2ansiParser.unary_expression_return unary_expression474 = null;

        ObjectiveC2ansiParser.unary_expression_return unary_expression476 = null;

        ObjectiveC2ansiParser.unary_operator_return unary_operator477 = null;

        ObjectiveC2ansiParser.cast_expression_return cast_expression478 = null;

        ObjectiveC2ansiParser.type_name_return type_name481 = null;

        ObjectiveC2ansiParser.unary_expression_return unary_expression483 = null;


        object string_literal473_tree=null;
        object string_literal475_tree=null;
        object string_literal479_tree=null;
        object char_literal480_tree=null;
        object char_literal482_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:435:5: ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' ( '(' type_name ')' | unary_expression ) )
            int alt116 = 5;
            switch ( input.LA(1) ) 
            {
            case CHARACTER_LITERAL:
            case DECIMAL_LITERAL:
            case FLOATING_POINT_LITERAL:
            case HEX_LITERAL:
            case IDENTIFIER:
            case OCTAL_LITERAL:
            case STRING_LITERAL:
            case 40:
            case 56:
            case 65:
            case 67:
            case 72:
            case 132:
            	{
                alt116 = 1;
                }
                break;
            case 84:
            	{
                alt116 = 2;
                }
                break;
            case 23:
            	{
                alt116 = 3;
                }
                break;
            case 22:
            case 24:
            case 37:
            case 42:
            case 82:
            	{
                alt116 = 4;
                }
                break;
            case 135:
            	{
                alt116 = 5;
                }
                break;
            	default:
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d116s0 =
            	        new NoViableAltException("", 116, 0, input);

            	    throw nvae_d116s0;
            }

            switch (alt116) 
            {
                case 1 :
                    // ObjectiveC2ansi.g:435:5: postfix_expression
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_postfix_expression_in_unary_expression2698);
                    	postfix_expression472 = postfix_expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, postfix_expression472.Tree);

                    }
                    break;
                case 2 :
                    // ObjectiveC2ansi.g:436:5: '++' unary_expression
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal473=(IToken)Match(input,84,FOLLOW_84_in_unary_expression2704); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal473_tree = (object)adaptor.Create(string_literal473);
                    		adaptor.AddChild(root_0, string_literal473_tree);
                    	}
                    	PushFollow(FOLLOW_unary_expression_in_unary_expression2706);
                    	unary_expression474 = unary_expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, unary_expression474.Tree);

                    }
                    break;
                case 3 :
                    // ObjectiveC2ansi.g:437:5: '--' unary_expression
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	string_literal475=(IToken)Match(input,23,FOLLOW_23_in_unary_expression2712); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal475_tree = (object)adaptor.Create(string_literal475);
                    		adaptor.AddChild(root_0, string_literal475_tree);
                    	}
                    	PushFollow(FOLLOW_unary_expression_in_unary_expression2714);
                    	unary_expression476 = unary_expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, unary_expression476.Tree);

                    }
                    break;
                case 4 :
                    // ObjectiveC2ansi.g:438:5: unary_operator cast_expression
                    {
                    	root_0 = (object)adaptor.GetNilNode();


                    	PushFollow(FOLLOW_unary_operator_in_unary_expression2720);
                    	unary_operator477 = unary_operator();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, unary_operator477.Tree);
                    	PushFollow(FOLLOW_cast_expression_in_unary_expression2722);
                    	cast_expression478 = cast_expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, cast_expression478.Tree);

                    }
                    break;
                case 5 :
                    // ObjectiveC2ansi.g:439:5: 'sizeof' ( '(' type_name ')' | unary_expression )
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	string_literal479=(IToken)Match(input,135,FOLLOW_135_in_unary_expression2728); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal479_tree = (object)adaptor.Create(string_literal479);
                    		adaptor.AddChild(root_0, string_literal479_tree);
                    	}
                    	// ObjectiveC2ansi.g:439:14: ( '(' type_name ')' | unary_expression )
                    	int alt115 = 2;
                    	alt115 = dfa115.Predict(input);
                    	switch (alt115) 
                    	{
                    	    case 1 :
                    	        // ObjectiveC2ansi.g:439:15: '(' type_name ')'
                    	        {

                    	        	char_literal480=(IToken)Match(input,40,FOLLOW_40_in_unary_expression2731); if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 )
                    	        	{char_literal480_tree = (object)adaptor.Create(char_literal480);
                    	        		adaptor.AddChild(root_0, char_literal480_tree);
                    	        	}
                    	        	PushFollow(FOLLOW_type_name_in_unary_expression2733);
                    	        	type_name481 = type_name();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, type_name481.Tree);
                    	        	char_literal482=(IToken)Match(input,41,FOLLOW_41_in_unary_expression2735); if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 )
                    	        	{char_literal482_tree = (object)adaptor.Create(char_literal482);
                    	        		adaptor.AddChild(root_0, char_literal482_tree);
                    	        	}

                    	        }
                    	        break;
                    	    case 2 :
                    	        // ObjectiveC2ansi.g:439:35: unary_expression
                    	        {
                    	        	PushFollow(FOLLOW_unary_expression_in_unary_expression2739);
                    	        	unary_expression483 = unary_expression();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, unary_expression483.Tree);

                    	        }
                    	        break;

                    	}


                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "unary_expression"

    public class unary_operator_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "unary_operator"
    // ObjectiveC2ansi.g:441:0: unary_operator : ( '&' | '*' | '-' | '~' | '!' );
    public ObjectiveC2ansiParser.unary_operator_return unary_operator() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.unary_operator_return retval = new ObjectiveC2ansiParser.unary_operator_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken set484 = null;

        object set484_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:441:18: ( '&' | '*' | '-' | '~' | '!' )
            // ObjectiveC2ansi.g:
            {
            	root_0 = (object)adaptor.GetNilNode();

            	set484 = (IToken)input.LT(1);
            	if ( input.LA(1) == 22 || input.LA(1) == 24 || input.LA(1) == 37 || input.LA(1) == 42 || input.LA(1) == 82 ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set484));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "unary_operator"

    public class postfix_expression_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "postfix_expression"
    // ObjectiveC2ansi.g:443:0: postfix_expression : primary_expression ( '[' expression ']' | '(' ( argument_expression_list )? ')' | '.' identifier | '->' identifier | '++' | '--' )* ;
    public ObjectiveC2ansiParser.postfix_expression_return postfix_expression() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.postfix_expression_return retval = new ObjectiveC2ansiParser.postfix_expression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal486 = null;
        IToken char_literal488 = null;
        IToken char_literal489 = null;
        IToken char_literal491 = null;
        IToken char_literal492 = null;
        IToken string_literal494 = null;
        IToken string_literal496 = null;
        IToken string_literal497 = null;
        ObjectiveC2ansiParser.primary_expression_return primary_expression485 = null;

        ObjectiveC2ansiParser.expression_return expression487 = null;

        ObjectiveC2ansiParser.argument_expression_list_return argument_expression_list490 = null;

        ObjectiveC2ansiParser.identifier_return identifier493 = null;

        ObjectiveC2ansiParser.identifier_return identifier495 = null;


        object char_literal486_tree=null;
        object char_literal488_tree=null;
        object char_literal489_tree=null;
        object char_literal491_tree=null;
        object char_literal492_tree=null;
        object string_literal494_tree=null;
        object string_literal496_tree=null;
        object string_literal497_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:443:22: ( primary_expression ( '[' expression ']' | '(' ( argument_expression_list )? ')' | '.' identifier | '->' identifier | '++' | '--' )* )
            // ObjectiveC2ansi.g:443:22: primary_expression ( '[' expression ']' | '(' ( argument_expression_list )? ')' | '.' identifier | '->' identifier | '++' | '--' )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_primary_expression_in_postfix_expression2774);
            	primary_expression485 = primary_expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, primary_expression485.Tree);
            	// ObjectiveC2ansi.g:444:3: ( '[' expression ']' | '(' ( argument_expression_list )? ')' | '.' identifier | '->' identifier | '++' | '--' )*
            	do 
            	{
            	    int alt118 = 7;
            	    switch ( input.LA(1) ) 
            	    {
            	    case 72:
            	    	{
            	        alt118 = 1;
            	        }
            	        break;
            	    case 40:
            	    	{
            	        alt118 = 2;
            	        }
            	        break;
            	    case 45:
            	    	{
            	        alt118 = 3;
            	        }
            	        break;
            	    case 94:
            	    	{
            	        alt118 = 4;
            	        }
            	        break;
            	    case 84:
            	    	{
            	        alt118 = 5;
            	        }
            	        break;
            	    case 23:
            	    	{
            	        alt118 = 6;
            	        }
            	        break;

            	    }

            	    switch (alt118) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:444:4: '[' expression ']'
            			    {

            			    	char_literal486=(IToken)Match(input,72,FOLLOW_72_in_postfix_expression2779); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal486_tree = (object)adaptor.Create(char_literal486);
            			    		adaptor.AddChild(root_0, char_literal486_tree);
            			    	}
            			    	PushFollow(FOLLOW_expression_in_postfix_expression2781);
            			    	expression487 = expression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression487.Tree);
            			    	char_literal488=(IToken)Match(input,74,FOLLOW_74_in_postfix_expression2783); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal488_tree = (object)adaptor.Create(char_literal488);
            			    		adaptor.AddChild(root_0, char_literal488_tree);
            			    	}

            			    }
            			    break;
            			case 2 :
            			    // ObjectiveC2ansi.g:445:5: '(' ( argument_expression_list )? ')'
            			    {

            			    	char_literal489=(IToken)Match(input,40,FOLLOW_40_in_postfix_expression2790); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal489_tree = (object)adaptor.Create(char_literal489);
            			    		adaptor.AddChild(root_0, char_literal489_tree);
            			    	}
            			    	// ObjectiveC2ansi.g:445:9: ( argument_expression_list )?
            			    	int alt117 = 2;
            			    	int LA117_0 = input.LA(1);

            			    	if ( (LA117_0 == CHARACTER_LITERAL || LA117_0 == DECIMAL_LITERAL || LA117_0 == FLOATING_POINT_LITERAL || LA117_0 == HEX_LITERAL || LA117_0 == IDENTIFIER || LA117_0 == OCTAL_LITERAL || LA117_0 == STRING_LITERAL || (LA117_0 >= 22 && LA117_0 <= 24) || LA117_0 == 37 || LA117_0 == 40 || LA117_0 == 42 || LA117_0 == 56 || LA117_0 == 65 || LA117_0 == 67 || LA117_0 == 72 || LA117_0 == 82 || LA117_0 == 84 || LA117_0 == 132 || LA117_0 == 135) )
            			    	{
            			    	    alt117 = 1;
            			    	}
            			    	switch (alt117) 
            			    	{
            			    	    case 1 :
            			    	        // ObjectiveC2ansi.g:0:0: argument_expression_list
            			    	        {

            			    	        	PushFollow(FOLLOW_argument_expression_list_in_postfix_expression2792);
            			    	        	argument_expression_list490 = argument_expression_list();
            			    	        	state.followingStackPointer--;
            			    	        	if (state.failed) return retval;
            			    	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, argument_expression_list490.Tree);

            			    	        }
            			    	        break;

            			    	}

            			    	char_literal491=(IToken)Match(input,41,FOLLOW_41_in_postfix_expression2795); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal491_tree = (object)adaptor.Create(char_literal491);
            			    		adaptor.AddChild(root_0, char_literal491_tree);
            			    	}

            			    }
            			    break;
            			case 3 :
            			    // ObjectiveC2ansi.g:446:5: '.' identifier
            			    {

            			    	char_literal492=(IToken)Match(input,45,FOLLOW_45_in_postfix_expression2801); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal492_tree = (object)adaptor.Create(char_literal492);
            			    		adaptor.AddChild(root_0, char_literal492_tree);
            			    	}
            			    	PushFollow(FOLLOW_identifier_in_postfix_expression2803);
            			    	identifier493 = identifier();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, identifier493.Tree);

            			    }
            			    break;
            			case 4 :
            			    // ObjectiveC2ansi.g:447:5: '->' identifier
            			    {

            			    	string_literal494=(IToken)Match(input,94,FOLLOW_94_in_postfix_expression2809); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{string_literal494_tree = (object)adaptor.Create(string_literal494);
            			    		adaptor.AddChild(root_0, string_literal494_tree);
            			    	}
            			    	PushFollow(FOLLOW_identifier_in_postfix_expression2811);
            			    	identifier495 = identifier();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, identifier495.Tree);

            			    }
            			    break;
            			case 5 :
            			    // ObjectiveC2ansi.g:448:5: '++'
            			    {

            			    	string_literal496=(IToken)Match(input,84,FOLLOW_84_in_postfix_expression2817); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{string_literal496_tree = (object)adaptor.Create(string_literal496);
            			    		adaptor.AddChild(root_0, string_literal496_tree);
            			    	}

            			    }
            			    break;
            			case 6 :
            			    // ObjectiveC2ansi.g:449:5: '--'
            			    {

            			    	string_literal497=(IToken)Match(input,23,FOLLOW_23_in_postfix_expression2823); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{string_literal497_tree = (object)adaptor.Create(string_literal497);
            			    		adaptor.AddChild(root_0, string_literal497_tree);
            			    	}

            			    }
            			    break;

            			default:
            			    goto loop118;
            	    }
            	} while (true);

            	loop118:
            		;	// Stops C# compiler whining that label 'loop118' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "postfix_expression"

    public class argument_expression_list_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "argument_expression_list"
    // ObjectiveC2ansi.g:452:0: argument_expression_list : assignment_expression ( ',' assignment_expression )* ;
    public ObjectiveC2ansiParser.argument_expression_list_return argument_expression_list() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.argument_expression_list_return retval = new ObjectiveC2ansiParser.argument_expression_list_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken char_literal499 = null;
        ObjectiveC2ansiParser.assignment_expression_return assignment_expression498 = null;

        ObjectiveC2ansiParser.assignment_expression_return assignment_expression500 = null;


        object char_literal499_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:453:5: ( assignment_expression ( ',' assignment_expression )* )
            // ObjectiveC2ansi.g:453:5: assignment_expression ( ',' assignment_expression )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_assignment_expression_in_argument_expression_list2839);
            	assignment_expression498 = assignment_expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, assignment_expression498.Tree);
            	// ObjectiveC2ansi.g:453:27: ( ',' assignment_expression )*
            	do 
            	{
            	    int alt119 = 2;
            	    int LA119_0 = input.LA(1);

            	    if ( (LA119_0 == 44) )
            	    {
            	        alt119 = 1;
            	    }


            	    switch (alt119) 
            		{
            			case 1 :
            			    // ObjectiveC2ansi.g:453:28: ',' assignment_expression
            			    {

            			    	char_literal499=(IToken)Match(input,44,FOLLOW_44_in_argument_expression_list2842); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal499_tree = (object)adaptor.Create(char_literal499);
            			    		adaptor.AddChild(root_0, char_literal499_tree);
            			    	}
            			    	PushFollow(FOLLOW_assignment_expression_in_argument_expression_list2844);
            			    	assignment_expression500 = assignment_expression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, assignment_expression500.Tree);

            			    }
            			    break;

            			default:
            			    goto loop119;
            	    }
            	} while (true);

            	loop119:
            		;	// Stops C# compiler whining that label 'loop119' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "argument_expression_list"

    public class identifier_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "identifier"
    // ObjectiveC2ansi.g:455:0: identifier : IDENTIFIER ;
    public ObjectiveC2ansiParser.identifier_return identifier() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.identifier_return retval = new ObjectiveC2ansiParser.identifier_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken IDENTIFIER501 = null;

        object IDENTIFIER501_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:455:14: ( IDENTIFIER )
            // ObjectiveC2ansi.g:455:14: IDENTIFIER
            {
            	root_0 = (object)adaptor.GetNilNode();

            	IDENTIFIER501=(IToken)Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_identifier2855); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{IDENTIFIER501_tree = (object)adaptor.Create(IDENTIFIER501);
            		adaptor.AddChild(root_0, IDENTIFIER501_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "identifier"

    public class constant_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "constant"
    // ObjectiveC2ansi.g:457:0: constant : ( DECIMAL_LITERAL | HEX_LITERAL | OCTAL_LITERAL | CHARACTER_LITERAL | FLOATING_POINT_LITERAL );
    public ObjectiveC2ansiParser.constant_return constant() // throws RecognitionException [1]
    {   
        ObjectiveC2ansiParser.constant_return retval = new ObjectiveC2ansiParser.constant_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken set502 = null;

        object set502_tree=null;

        try 
    	{
            // ObjectiveC2ansi.g:457:12: ( DECIMAL_LITERAL | HEX_LITERAL | OCTAL_LITERAL | CHARACTER_LITERAL | FLOATING_POINT_LITERAL )
            // ObjectiveC2ansi.g:
            {
            	root_0 = (object)adaptor.GetNilNode();

            	set502 = (IToken)input.LT(1);
            	if ( input.LA(1) == CHARACTER_LITERAL || input.LA(1) == DECIMAL_LITERAL || input.LA(1) == FLOATING_POINT_LITERAL || input.LA(1) == HEX_LITERAL || input.LA(1) == OCTAL_LITERAL ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set502));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR end "constant"

    // $ANTLR start "synpred10_ObjectiveC2ansi"
    public void synpred10_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:27:0: ( category_implementation )
        // ObjectiveC2ansi.g:27:3: category_implementation
        {
        	PushFollow(FOLLOW_category_implementation_in_synpred10_ObjectiveC2ansi80);
        	category_implementation();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred10_ObjectiveC2ansi"

    // $ANTLR start "synpred11_ObjectiveC2ansi"
    public void synpred11_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:28:0: ( protocol_declaration )
        // ObjectiveC2ansi.g:28:3: protocol_declaration
        {
        	PushFollow(FOLLOW_protocol_declaration_in_synpred11_ObjectiveC2ansi84);
        	protocol_declaration();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred11_ObjectiveC2ansi"

    // $ANTLR start "synpred114_ObjectiveC2ansi"
    public void synpred114_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:273:0: ( type_specifier )
        // ObjectiveC2ansi.g:273:32: type_specifier
        {
        	PushFollow(FOLLOW_type_specifier_in_synpred114_ObjectiveC2ansi1317);
        	type_specifier();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred114_ObjectiveC2ansi"

    // $ANTLR start "synpred12_ObjectiveC2ansi"
    public void synpred12_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:29:0: ( protocol_declaration_list )
        // ObjectiveC2ansi.g:29:3: protocol_declaration_list
        {
        	PushFollow(FOLLOW_protocol_declaration_list_in_synpred12_ObjectiveC2ansi88);
        	protocol_declaration_list();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred12_ObjectiveC2ansi"

    // $ANTLR start "synpred123_ObjectiveC2ansi"
    public void synpred123_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:281:0: ( IDENTIFIER )
        // ObjectiveC2ansi.g:281:5: IDENTIFIER
        {
        	Match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_synpred123_ObjectiveC2ansi1398); if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred123_ObjectiveC2ansi"

    // $ANTLR start "synpred128_ObjectiveC2ansi"
    public void synpred128_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:288:0: ( specifier_qualifier_list )
        // ObjectiveC2ansi.g:288:0: specifier_qualifier_list
        {
        	PushFollow(FOLLOW_specifier_qualifier_list_in_synpred128_ObjectiveC2ansi1466);
        	specifier_qualifier_list();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred128_ObjectiveC2ansi"

    // $ANTLR start "synpred129_ObjectiveC2ansi"
    public void synpred129_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:293:0: ( declarator )
        // ObjectiveC2ansi.g:293:4: declarator
        {
        	PushFollow(FOLLOW_declarator_in_synpred129_ObjectiveC2ansi1486);
        	declarator();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred129_ObjectiveC2ansi"

    // $ANTLR start "synpred131_ObjectiveC2ansi"
    public void synpred131_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:299:0: ( '{' enumerator_list '}' )
        // ObjectiveC2ansi.g:299:17: '{' enumerator_list '}'
        {
        	Match(input,77,FOLLOW_77_in_synpred131_ObjectiveC2ansi1543); if (state.failed) return ;
        	PushFollow(FOLLOW_enumerator_list_in_synpred131_ObjectiveC2ansi1545);
        	enumerator_list();
        	state.followingStackPointer--;
        	if (state.failed) return ;
        	Match(input,81,FOLLOW_81_in_synpred131_ObjectiveC2ansi1547); if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred131_ObjectiveC2ansi"

    // $ANTLR start "synpred141_ObjectiveC2ansi"
    public void synpred141_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:319:0: ( '[' constant_expression ']' )
        // ObjectiveC2ansi.g:319:3: '[' constant_expression ']'
        {
        	Match(input,72,FOLLOW_72_in_synpred141_ObjectiveC2ansi1725); if (state.failed) return ;
        	PushFollow(FOLLOW_constant_expression_in_synpred141_ObjectiveC2ansi1727);
        	constant_expression();
        	state.followingStackPointer--;
        	if (state.failed) return ;
        	Match(input,74,FOLLOW_74_in_synpred141_ObjectiveC2ansi1729); if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred141_ObjectiveC2ansi"

    // $ANTLR start "synpred142_ObjectiveC2ansi"
    public void synpred142_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:319:0: ( '[' ']' )
        // ObjectiveC2ansi.g:319:33: '[' ']'
        {
        	Match(input,72,FOLLOW_72_in_synpred142_ObjectiveC2ansi1733); if (state.failed) return ;
        	Match(input,74,FOLLOW_74_in_synpred142_ObjectiveC2ansi1735); if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred142_ObjectiveC2ansi"

    // $ANTLR start "synpred143_ObjectiveC2ansi"
    public void synpred143_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:319:0: ( '(' parameter_type_list ')' )
        // ObjectiveC2ansi.g:319:43: '(' parameter_type_list ')'
        {
        	Match(input,40,FOLLOW_40_in_synpred143_ObjectiveC2ansi1739); if (state.failed) return ;
        	PushFollow(FOLLOW_parameter_type_list_in_synpred143_ObjectiveC2ansi1741);
        	parameter_type_list();
        	state.followingStackPointer--;
        	if (state.failed) return ;
        	Match(input,41,FOLLOW_41_in_synpred143_ObjectiveC2ansi1743); if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred143_ObjectiveC2ansi"

    // $ANTLR start "synpred144_ObjectiveC2ansi"
    public void synpred144_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:319:0: ( '(' identifier_list ')' )
        // ObjectiveC2ansi.g:319:73: '(' identifier_list ')'
        {
        	Match(input,40,FOLLOW_40_in_synpred144_ObjectiveC2ansi1747); if (state.failed) return ;
        	PushFollow(FOLLOW_identifier_list_in_synpred144_ObjectiveC2ansi1749);
        	identifier_list();
        	state.followingStackPointer--;
        	if (state.failed) return ;
        	Match(input,41,FOLLOW_41_in_synpred144_ObjectiveC2ansi1751); if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred144_ObjectiveC2ansi"

    // $ANTLR start "synpred145_ObjectiveC2ansi"
    public void synpred145_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:319:0: ( '(' ')' )
        // ObjectiveC2ansi.g:319:99: '(' ')'
        {
        	Match(input,40,FOLLOW_40_in_synpred145_ObjectiveC2ansi1755); if (state.failed) return ;
        	Match(input,41,FOLLOW_41_in_synpred145_ObjectiveC2ansi1757); if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred145_ObjectiveC2ansi"

    // $ANTLR start "synpred147_ObjectiveC2ansi"
    public void synpred147_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:327:0: ( parameter_list )
        // ObjectiveC2ansi.g:327:8: parameter_list
        {
        	PushFollow(FOLLOW_parameter_list_in_synpred147_ObjectiveC2ansi1815);
        	parameter_list();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred147_ObjectiveC2ansi"

    // $ANTLR start "synpred152_ObjectiveC2ansi"
    public void synpred152_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:340:0: ( declarator )
        // ObjectiveC2ansi.g:340:29: declarator
        {
        	PushFollow(FOLLOW_declarator_in_synpred152_ObjectiveC2ansi1925);
        	declarator();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred152_ObjectiveC2ansi"

    // $ANTLR start "synpred153_ObjectiveC2ansi"
    public void synpred153_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:340:0: ( abstract_declarator )
        // ObjectiveC2ansi.g:340:42: abstract_declarator
        {
        	PushFollow(FOLLOW_abstract_declarator_in_synpred153_ObjectiveC2ansi1929);
        	abstract_declarator();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred153_ObjectiveC2ansi"

    // $ANTLR start "synpred157_ObjectiveC2ansi"
    public void synpred157_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:347:0: ( '*' ( type_qualifier )* abstract_declarator )
        // ObjectiveC2ansi.g:347:23: '*' ( type_qualifier )* abstract_declarator
        {
        	Match(input,42,FOLLOW_42_in_synpred157_ObjectiveC2ansi1980); if (state.failed) return ;
        	// ObjectiveC2ansi.g:347:27: ( type_qualifier )*
        	do 
        	{
        	    int alt123 = 2;
        	    int LA123_0 = input.LA(1);

        	    if ( ((LA123_0 >= 102 && LA123_0 <= 103) || LA123_0 == 106 || (LA123_0 >= 120 && LA123_0 <= 121) || (LA123_0 >= 125 && LA123_0 <= 126) || LA123_0 == 144) )
        	    {
        	        alt123 = 1;
        	    }


        	    switch (alt123) 
        		{
        			case 1 :
        			    // ObjectiveC2ansi.g:0:0: type_qualifier
        			    {

        			    	PushFollow(FOLLOW_type_qualifier_in_synpred157_ObjectiveC2ansi1982);
        			    	type_qualifier();
        			    	state.followingStackPointer--;
        			    	if (state.failed) return ;

        			    }
        			    break;

        			default:
        			    goto loop123;
        	    }
        	} while (true);

        	loop123:
        		;	// Stops C# compiler whining that label 'loop123' has no statements

        	PushFollow(FOLLOW_abstract_declarator_in_synpred157_ObjectiveC2ansi1985);
        	abstract_declarator();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred157_ObjectiveC2ansi"

    // $ANTLR start "synpred158_ObjectiveC2ansi"
    public void synpred158_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:348:0: ( abstract_declarator_suffix )
        // ObjectiveC2ansi.g:348:0: abstract_declarator_suffix
        {
        	PushFollow(FOLLOW_abstract_declarator_suffix_in_synpred158_ObjectiveC2ansi1998);
        	abstract_declarator_suffix();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred158_ObjectiveC2ansi"

    // $ANTLR start "synpred159_ObjectiveC2ansi"
    public void synpred159_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:348:0: ( '(' abstract_declarator ')' ( abstract_declarator_suffix )+ )
        // ObjectiveC2ansi.g:348:5: '(' abstract_declarator ')' ( abstract_declarator_suffix )+
        {
        	Match(input,40,FOLLOW_40_in_synpred159_ObjectiveC2ansi1992); if (state.failed) return ;
        	PushFollow(FOLLOW_abstract_declarator_in_synpred159_ObjectiveC2ansi1994);
        	abstract_declarator();
        	state.followingStackPointer--;
        	if (state.failed) return ;
        	Match(input,41,FOLLOW_41_in_synpred159_ObjectiveC2ansi1996); if (state.failed) return ;
        	// ObjectiveC2ansi.g:348:33: ( abstract_declarator_suffix )+
        	int cnt124 = 0;
        	do 
        	{
        	    int alt124 = 2;
        	    int LA124_0 = input.LA(1);

        	    if ( (LA124_0 == 40 || LA124_0 == 72) )
        	    {
        	        alt124 = 1;
        	    }


        	    switch (alt124) 
        		{
        			case 1 :
        			    // ObjectiveC2ansi.g:0:0: abstract_declarator_suffix
        			    {

        			    	PushFollow(FOLLOW_abstract_declarator_suffix_in_synpred159_ObjectiveC2ansi1998);
        			    	abstract_declarator_suffix();
        			    	state.followingStackPointer--;
        			    	if (state.failed) return ;

        			    }
        			    break;

        			default:
        			    if ( cnt124 >= 1 ) goto loop124;
        			    if ( state.backtracking > 0 ) {state.failed = true; return ;}
        		            EarlyExitException eee124 =
        		                new EarlyExitException(124, input);
        		            throw eee124;
        	    }
        	    cnt124++;
        	} while (true);

        	loop124:
        		;	// Stops C# compiler whining that label 'loop124' has no statements


        }
    }
    // $ANTLR end "synpred159_ObjectiveC2ansi"

    // $ANTLR start "synpred176_ObjectiveC2ansi"
    public void synpred176_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:375:0: ( declaration )
        // ObjectiveC2ansi.g:375:27: declaration
        {
        	PushFollow(FOLLOW_declaration_in_synpred176_ObjectiveC2ansi2176);
        	declaration();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred176_ObjectiveC2ansi"

    // $ANTLR start "synpred178_ObjectiveC2ansi"
    public void synpred178_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:378:0: ( 'else' statement )
        // ObjectiveC2ansi.g:378:40: 'else' statement
        {
        	Match(input,112,FOLLOW_112_in_synpred178_ObjectiveC2ansi2205); if (state.failed) return ;
        	PushFollow(FOLLOW_statement_in_synpred178_ObjectiveC2ansi2207);
        	statement();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred178_ObjectiveC2ansi"

    // $ANTLR start "synpred220_ObjectiveC2ansi"
    public void synpred220_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:432:0: ( '(' type_name ')' cast_expression )
        // ObjectiveC2ansi.g:432:19: '(' type_name ')' cast_expression
        {
        	Match(input,40,FOLLOW_40_in_synpred220_ObjectiveC2ansi2676); if (state.failed) return ;
        	PushFollow(FOLLOW_type_name_in_synpred220_ObjectiveC2ansi2678);
        	type_name();
        	state.followingStackPointer--;
        	if (state.failed) return ;
        	Match(input,41,FOLLOW_41_in_synpred220_ObjectiveC2ansi2680); if (state.failed) return ;
        	PushFollow(FOLLOW_cast_expression_in_synpred220_ObjectiveC2ansi2682);
        	cast_expression();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred220_ObjectiveC2ansi"

    // $ANTLR start "synpred225_ObjectiveC2ansi"
    public void synpred225_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:439:0: ( '(' type_name ')' )
        // ObjectiveC2ansi.g:439:15: '(' type_name ')'
        {
        	Match(input,40,FOLLOW_40_in_synpred225_ObjectiveC2ansi2731); if (state.failed) return ;
        	PushFollow(FOLLOW_type_name_in_synpred225_ObjectiveC2ansi2733);
        	type_name();
        	state.followingStackPointer--;
        	if (state.failed) return ;
        	Match(input,41,FOLLOW_41_in_synpred225_ObjectiveC2ansi2735); if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred225_ObjectiveC2ansi"

    // $ANTLR start "synpred34_ObjectiveC2ansi"
    public void synpred34_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:70:0: ( implementation_definition_list )
        // ObjectiveC2ansi.g:70:4: implementation_definition_list
        {
        	PushFollow(FOLLOW_implementation_definition_list_in_synpred34_ObjectiveC2ansi314);
        	implementation_definition_list();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred34_ObjectiveC2ansi"

    // $ANTLR start "synpred35_ObjectiveC2ansi"
    public void synpred35_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:77:0: ( implementation_definition_list )
        // ObjectiveC2ansi.g:77:4: implementation_definition_list
        {
        	PushFollow(FOLLOW_implementation_definition_list_in_synpred35_ObjectiveC2ansi346);
        	implementation_definition_list();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred35_ObjectiveC2ansi"

    // $ANTLR start "synpred43_ObjectiveC2ansi"
    public void synpred43_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:122:0: ( struct_declaration )
        // ObjectiveC2ansi.g:122:33: struct_declaration
        {
        	PushFollow(FOLLOW_struct_declaration_in_synpred43_ObjectiveC2ansi544);
        	struct_declaration();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred43_ObjectiveC2ansi"

    // $ANTLR start "synpred5_ObjectiveC2ansi"
    public void synpred5_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:22:0: ( function_definition )
        // ObjectiveC2ansi.g:22:2: function_definition
        {
        	PushFollow(FOLLOW_function_definition_in_synpred5_ObjectiveC2ansi59);
        	function_definition();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred5_ObjectiveC2ansi"

    // $ANTLR start "synpred55_ObjectiveC2ansi"
    public void synpred55_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:154:0: ( function_definition )
        // ObjectiveC2ansi.g:154:46: function_definition
        {
        	PushFollow(FOLLOW_function_definition_in_synpred55_ObjectiveC2ansi703);
        	function_definition();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred55_ObjectiveC2ansi"

    // $ANTLR start "synpred56_ObjectiveC2ansi"
    public void synpred56_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:154:0: ( declaration )
        // ObjectiveC2ansi.g:154:68: declaration
        {
        	PushFollow(FOLLOW_declaration_in_synpred56_ObjectiveC2ansi707);
        	declaration();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred56_ObjectiveC2ansi"

    // $ANTLR start "synpred6_ObjectiveC2ansi"
    public void synpred6_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:23:0: ( declaration )
        // ObjectiveC2ansi.g:23:3: declaration
        {
        	PushFollow(FOLLOW_declaration_in_synpred6_ObjectiveC2ansi63);
        	declaration();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred6_ObjectiveC2ansi"

    // $ANTLR start "synpred63_ObjectiveC2ansi"
    public void synpred63_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:168:0: ( parameter_list )
        // ObjectiveC2ansi.g:168:34: parameter_list
        {
        	PushFollow(FOLLOW_parameter_list_in_synpred63_ObjectiveC2ansi782);
        	parameter_list();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred63_ObjectiveC2ansi"

    // $ANTLR start "synpred7_ObjectiveC2ansi"
    public void synpred7_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:24:0: ( class_interface )
        // ObjectiveC2ansi.g:24:3: class_interface
        {
        	PushFollow(FOLLOW_class_interface_in_synpred7_ObjectiveC2ansi68);
        	class_interface();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred7_ObjectiveC2ansi"

    // $ANTLR start "synpred78_ObjectiveC2ansi"
    public void synpred78_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:183:0: ( ( class_name ( protocol_reference_list )? ) )
        // ObjectiveC2ansi.g:183:4: ( class_name ( protocol_reference_list )? )
        {
        	// ObjectiveC2ansi.g:183:4: ( class_name ( protocol_reference_list )? )
        	// ObjectiveC2ansi.g:183:5: class_name ( protocol_reference_list )?
        	{
        		PushFollow(FOLLOW_class_name_in_synpred78_ObjectiveC2ansi883);
        		class_name();
        		state.followingStackPointer--;
        		if (state.failed) return ;
        		// ObjectiveC2ansi.g:183:16: ( protocol_reference_list )?
        		int alt134 = 2;
        		int LA134_0 = input.LA(1);

        		if ( (LA134_0 == 86) )
        		{
        		    alt134 = 1;
        		}
        		switch (alt134) 
        		{
        		    case 1 :
        		        // ObjectiveC2ansi.g:183:18: protocol_reference_list
        		        {

        		        	PushFollow(FOLLOW_protocol_reference_list_in_synpred78_ObjectiveC2ansi887);
        		        	protocol_reference_list();
        		        	state.followingStackPointer--;
        		        	if (state.failed) return ;

        		        }
        		        break;

        		}


        	}


        }
    }
    // $ANTLR end "synpred78_ObjectiveC2ansi"

    // $ANTLR start "synpred8_ObjectiveC2ansi"
    public void synpred8_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:25:0: ( class_implementation )
        // ObjectiveC2ansi.g:25:3: class_implementation
        {
        	PushFollow(FOLLOW_class_implementation_in_synpred8_ObjectiveC2ansi72);
        	class_implementation();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred8_ObjectiveC2ansi"

    // $ANTLR start "synpred9_ObjectiveC2ansi"
    public void synpred9_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:26:0: ( category_interface )
        // ObjectiveC2ansi.g:26:3: category_interface
        {
        	PushFollow(FOLLOW_category_interface_in_synpred9_ObjectiveC2ansi76);
        	category_interface();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred9_ObjectiveC2ansi"

    // $ANTLR start "synpred96_ObjectiveC2ansi"
    public void synpred96_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:210:0: ( expression )
        // ObjectiveC2ansi.g:210:2: expression
        {
        	PushFollow(FOLLOW_expression_in_synpred96_ObjectiveC2ansi1031);
        	expression();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred96_ObjectiveC2ansi"

    // $ANTLR start "synpred97_ObjectiveC2ansi"
    public void synpred97_ObjectiveC2ansi_fragment() {
        // ObjectiveC2ansi.g:211:0: ( class_name )
        // ObjectiveC2ansi.g:211:4: class_name
        {
        	PushFollow(FOLLOW_class_name_in_synpred97_ObjectiveC2ansi1036);
        	class_name();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred97_ObjectiveC2ansi"

    // Delegated rules

   	public bool synpred5_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred5_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred6_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred6_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred7_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred7_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred9_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred9_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred8_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred8_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred10_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred10_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred11_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred11_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred12_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred12_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred34_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred34_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred35_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred35_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred43_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred43_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred55_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred55_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred56_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred56_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred63_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred63_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred78_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred78_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred96_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred96_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred97_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred97_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred114_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred114_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred123_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred123_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred128_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred128_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred129_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred129_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred131_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred131_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred143_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred143_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred144_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred144_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred145_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred145_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred141_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred141_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred142_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred142_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred147_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred147_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred153_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred153_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred152_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred152_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred158_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred158_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred157_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred157_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred159_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred159_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred176_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred176_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred178_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred178_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred220_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred220_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred225_ObjectiveC2ansi() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred225_ObjectiveC2ansi_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}


   	protected DFA2 dfa2;
   	protected DFA23 dfa23;
   	protected DFA28 dfa28;
   	protected DFA38 dfa38;
   	protected DFA59 dfa59;
   	protected DFA61 dfa61;
   	protected DFA66 dfa66;
   	protected DFA69 dfa69;
   	protected DFA71 dfa71;
   	protected DFA76 dfa76;
   	protected DFA83 dfa83;
   	protected DFA80 dfa80;
   	protected DFA91 dfa91;
   	protected DFA114 dfa114;
   	protected DFA115 dfa115;
	private void InitializeCyclicDFAs()
	{
    	this.dfa2 = new DFA2(this);
    	this.dfa23 = new DFA23(this);
    	this.dfa28 = new DFA28(this);
    	this.dfa38 = new DFA38(this);
    	this.dfa59 = new DFA59(this);
    	this.dfa61 = new DFA61(this);
    	this.dfa66 = new DFA66(this);
    	this.dfa69 = new DFA69(this);
    	this.dfa71 = new DFA71(this);
    	this.dfa76 = new DFA76(this);
    	this.dfa83 = new DFA83(this);
    	this.dfa80 = new DFA80(this);
    	this.dfa91 = new DFA91(this);
    	this.dfa114 = new DFA114(this);
    	this.dfa115 = new DFA115(this);
	    this.dfa2.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA2_SpecialStateTransition);
	    this.dfa23.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA23_SpecialStateTransition);
	    this.dfa28.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA28_SpecialStateTransition);
	    this.dfa38.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA38_SpecialStateTransition);
	    this.dfa59.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA59_SpecialStateTransition);
	    this.dfa61.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA61_SpecialStateTransition);

	    this.dfa69.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA69_SpecialStateTransition);
	    this.dfa71.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA71_SpecialStateTransition);
	    this.dfa76.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA76_SpecialStateTransition);
	    this.dfa83.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA83_SpecialStateTransition);
	    this.dfa80.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA80_SpecialStateTransition);
	    this.dfa91.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA91_SpecialStateTransition);
	    this.dfa114.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA114_SpecialStateTransition);
	    this.dfa115.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA115_SpecialStateTransition);
	}

    const string DFA2_eotS =
        "\x28\xFFFF";
    const string DFA2_eofS =
        "\x28\xFFFF";
    const string DFA2_minS =
        "\x1\x5\xA\xFFFF\x14\x0\x9\xFFFF";
    const string DFA2_maxS =
        "\x1\x90\xA\xFFFF\x14\x0\x9\xFFFF";
    const string DFA2_acceptS =
        "\x1\xFFFF\x1\x1\x1\x2\x1\x3\x1B\xFFFF\x1\xC\x1\x4\x1\x5\x1\x6\x1"+
        "\x8\x1\x7\x1\x9\x1\xA\x1\xB";
    const string DFA2_specialS =
        "\xB\xFFFF\x1\x0\x1\x1\x1\x2\x1\x3\x1\x4\x1\x5\x1\x6\x1\x7\x1\x8"+
        "\x1\x9\x1\xA\x1\xB\x1\xC\x1\xD\x1\xE\x1\xF\x1\x10\x1\x11\x1\x12"+
        "\x1\x13\x9\xFFFF}>";
    static readonly string[] DFA2_transitionS = {
            "\x1\x1\x7\xFFFF\x1\x16\x2\xFFFF\x1\x2\xA\xFFFF\x8\x3\x13\xFFFF"+
            "\x1\x1F\x4\xFFFF\x1\x1D\x1\x1C\x4\xFFFF\x1\x1E\x22\xFFFF\x1"+
            "\xB\x1\xFFFF\x2\x1B\x1\xFFFF\x1\xD\x1\x19\x4\xFFFF\x1\x12\x1"+
            "\xFFFF\x1\x18\x1\xB\x1\x11\x2\xFFFF\x1\x15\x1\xFFFF\x2\x1B\x1"+
            "\xF\x1\x10\x1\xFFFF\x2\x1B\x2\xFFFF\x1\xB\x3\xFFFF\x1\xE\x1"+
            "\x13\x1\xFFFF\x1\xB\x1\x17\x2\xFFFF\x1\xB\x1\x17\x1\x14\x1\xC"+
            "\x1\x1A",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA2_eot = DFA.UnpackEncodedString(DFA2_eotS);
    static readonly short[] DFA2_eof = DFA.UnpackEncodedString(DFA2_eofS);
    static readonly char[] DFA2_min = DFA.UnpackEncodedStringToUnsignedChars(DFA2_minS);
    static readonly char[] DFA2_max = DFA.UnpackEncodedStringToUnsignedChars(DFA2_maxS);
    static readonly short[] DFA2_accept = DFA.UnpackEncodedString(DFA2_acceptS);
    static readonly short[] DFA2_special = DFA.UnpackEncodedString(DFA2_specialS);
    static readonly short[][] DFA2_transition = DFA.UnpackEncodedStringArray(DFA2_transitionS);

    protected class DFA2 : DFA
    {
        public DFA2(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 2;
            this.eot = DFA2_eot;
            this.eof = DFA2_eof;
            this.min = DFA2_min;
            this.max = DFA2_max;
            this.accept = DFA2_accept;
            this.special = DFA2_special;
            this.transition = DFA2_transition;

        }

        override public string Description
        {
            get { return "20:0: external_declaration : ( COMMENT | LINE_COMMENT | preprocessor_declaration | function_definition | declaration | class_interface | class_implementation | category_interface | category_implementation | protocol_declaration | protocol_declaration_list | class_declaration_list );"; }
        }

    }


    protected internal int DFA2_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA2_11 = input.LA(1);

                   	 
                   	int index2_11 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred5_ObjectiveC2ansi()) ) { s = 32; }

                   	else if ( (synpred6_ObjectiveC2ansi()) ) { s = 33; }

                   	 
                   	input.Seek(index2_11);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 1 : 
                   	int LA2_12 = input.LA(1);

                   	 
                   	int index2_12 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred5_ObjectiveC2ansi()) ) { s = 32; }

                   	else if ( (synpred6_ObjectiveC2ansi()) ) { s = 33; }

                   	 
                   	input.Seek(index2_12);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 2 : 
                   	int LA2_13 = input.LA(1);

                   	 
                   	int index2_13 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred5_ObjectiveC2ansi()) ) { s = 32; }

                   	else if ( (synpred6_ObjectiveC2ansi()) ) { s = 33; }

                   	 
                   	input.Seek(index2_13);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 3 : 
                   	int LA2_14 = input.LA(1);

                   	 
                   	int index2_14 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred5_ObjectiveC2ansi()) ) { s = 32; }

                   	else if ( (synpred6_ObjectiveC2ansi()) ) { s = 33; }

                   	 
                   	input.Seek(index2_14);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 4 : 
                   	int LA2_15 = input.LA(1);

                   	 
                   	int index2_15 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred5_ObjectiveC2ansi()) ) { s = 32; }

                   	else if ( (synpred6_ObjectiveC2ansi()) ) { s = 33; }

                   	 
                   	input.Seek(index2_15);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 5 : 
                   	int LA2_16 = input.LA(1);

                   	 
                   	int index2_16 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred5_ObjectiveC2ansi()) ) { s = 32; }

                   	else if ( (synpred6_ObjectiveC2ansi()) ) { s = 33; }

                   	 
                   	input.Seek(index2_16);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 6 : 
                   	int LA2_17 = input.LA(1);

                   	 
                   	int index2_17 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred5_ObjectiveC2ansi()) ) { s = 32; }

                   	else if ( (synpred6_ObjectiveC2ansi()) ) { s = 33; }

                   	 
                   	input.Seek(index2_17);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 7 : 
                   	int LA2_18 = input.LA(1);

                   	 
                   	int index2_18 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred5_ObjectiveC2ansi()) ) { s = 32; }

                   	else if ( (synpred6_ObjectiveC2ansi()) ) { s = 33; }

                   	 
                   	input.Seek(index2_18);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 8 : 
                   	int LA2_19 = input.LA(1);

                   	 
                   	int index2_19 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred5_ObjectiveC2ansi()) ) { s = 32; }

                   	else if ( (synpred6_ObjectiveC2ansi()) ) { s = 33; }

                   	 
                   	input.Seek(index2_19);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 9 : 
                   	int LA2_20 = input.LA(1);

                   	 
                   	int index2_20 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred5_ObjectiveC2ansi()) ) { s = 32; }

                   	else if ( (synpred6_ObjectiveC2ansi()) ) { s = 33; }

                   	 
                   	input.Seek(index2_20);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 10 : 
                   	int LA2_21 = input.LA(1);

                   	 
                   	int index2_21 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred5_ObjectiveC2ansi()) ) { s = 32; }

                   	else if ( (synpred6_ObjectiveC2ansi()) ) { s = 33; }

                   	 
                   	input.Seek(index2_21);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 11 : 
                   	int LA2_22 = input.LA(1);

                   	 
                   	int index2_22 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred5_ObjectiveC2ansi()) ) { s = 32; }

                   	else if ( (synpred6_ObjectiveC2ansi()) ) { s = 33; }

                   	 
                   	input.Seek(index2_22);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 12 : 
                   	int LA2_23 = input.LA(1);

                   	 
                   	int index2_23 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred5_ObjectiveC2ansi()) ) { s = 32; }

                   	else if ( (synpred6_ObjectiveC2ansi()) ) { s = 33; }

                   	 
                   	input.Seek(index2_23);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 13 : 
                   	int LA2_24 = input.LA(1);

                   	 
                   	int index2_24 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred5_ObjectiveC2ansi()) ) { s = 32; }

                   	else if ( (synpred6_ObjectiveC2ansi()) ) { s = 33; }

                   	 
                   	input.Seek(index2_24);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 14 : 
                   	int LA2_25 = input.LA(1);

                   	 
                   	int index2_25 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred5_ObjectiveC2ansi()) ) { s = 32; }

                   	else if ( (synpred6_ObjectiveC2ansi()) ) { s = 33; }

                   	 
                   	input.Seek(index2_25);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 15 : 
                   	int LA2_26 = input.LA(1);

                   	 
                   	int index2_26 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred5_ObjectiveC2ansi()) ) { s = 32; }

                   	else if ( (synpred6_ObjectiveC2ansi()) ) { s = 33; }

                   	 
                   	input.Seek(index2_26);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 16 : 
                   	int LA2_27 = input.LA(1);

                   	 
                   	int index2_27 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred5_ObjectiveC2ansi()) ) { s = 32; }

                   	else if ( (synpred6_ObjectiveC2ansi()) ) { s = 33; }

                   	 
                   	input.Seek(index2_27);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 17 : 
                   	int LA2_28 = input.LA(1);

                   	 
                   	int index2_28 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred7_ObjectiveC2ansi()) ) { s = 34; }

                   	else if ( (synpred9_ObjectiveC2ansi()) ) { s = 35; }

                   	 
                   	input.Seek(index2_28);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 18 : 
                   	int LA2_29 = input.LA(1);

                   	 
                   	int index2_29 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred8_ObjectiveC2ansi()) ) { s = 36; }

                   	else if ( (synpred10_ObjectiveC2ansi()) ) { s = 37; }

                   	 
                   	input.Seek(index2_29);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 19 : 
                   	int LA2_30 = input.LA(1);

                   	 
                   	int index2_30 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred11_ObjectiveC2ansi()) ) { s = 38; }

                   	else if ( (synpred12_ObjectiveC2ansi()) ) { s = 39; }

                   	 
                   	input.Seek(index2_30);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae2 =
            new NoViableAltException(dfa.Description, 2, _s, input);
        dfa.Error(nvae2);
        throw nvae2;
    }
    const string DFA23_eotS =
        "\x15\xFFFF";
    const string DFA23_eofS =
        "\x1\x1\x14\xFFFF";
    const string DFA23_minS =
        "\x1\xD\x2\xFFFF\x10\x0\x2\xFFFF";
    const string DFA23_maxS =
        "\x1\x90\x2\xFFFF\x10\x0\x2\xFFFF";
    const string DFA23_acceptS =
        "\x1\xFFFF\x1\x2\x12\xFFFF\x1\x1";
    const string DFA23_specialS =
        "\x3\xFFFF\x1\x0\x1\x1\x1\x2\x1\x3\x1\x4\x1\x5\x1\x6\x1\x7\x1\x8"+
        "\x1\x9\x1\xA\x1\xB\x1\xC\x1\xD\x1\xE\x1\xF\x2\xFFFF}>";
    static readonly string[] DFA23_transitionS = {
            "\x1\xD\x2F\xFFFF\x2\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1\x1\xE\xFFFF"+
            "\x1\x1\x14\xFFFF\x2\x12\x1\xFFFF\x1\x4\x1\x10\x4\xFFFF\x1\x9"+
            "\x1\xFFFF\x1\xF\x1\xFFFF\x1\x8\x2\xFFFF\x1\xC\x1\xFFFF\x2\x12"+
            "\x1\x6\x1\x7\x1\xFFFF\x2\x12\x6\xFFFF\x1\x5\x1\xA\x2\xFFFF\x1"+
            "\xE\x3\xFFFF\x1\xE\x1\xB\x1\x3\x1\x11",
            "",
            "",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "",
            ""
    };

    static readonly short[] DFA23_eot = DFA.UnpackEncodedString(DFA23_eotS);
    static readonly short[] DFA23_eof = DFA.UnpackEncodedString(DFA23_eofS);
    static readonly char[] DFA23_min = DFA.UnpackEncodedStringToUnsignedChars(DFA23_minS);
    static readonly char[] DFA23_max = DFA.UnpackEncodedStringToUnsignedChars(DFA23_maxS);
    static readonly short[] DFA23_accept = DFA.UnpackEncodedString(DFA23_acceptS);
    static readonly short[] DFA23_special = DFA.UnpackEncodedString(DFA23_specialS);
    static readonly short[][] DFA23_transition = DFA.UnpackEncodedStringArray(DFA23_transitionS);

    protected class DFA23 : DFA
    {
        public DFA23(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 23;
            this.eot = DFA23_eot;
            this.eof = DFA23_eof;
            this.min = DFA23_min;
            this.max = DFA23_max;
            this.accept = DFA23_accept;
            this.special = DFA23_special;
            this.transition = DFA23_transition;

        }

        override public string Description
        {
            get { return "()* loopback of 122:32: ( struct_declaration )*"; }
        }

    }


    protected internal int DFA23_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA23_3 = input.LA(1);

                   	 
                   	int index23_3 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred43_ObjectiveC2ansi()) ) { s = 20; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index23_3);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 1 : 
                   	int LA23_4 = input.LA(1);

                   	 
                   	int index23_4 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred43_ObjectiveC2ansi()) ) { s = 20; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index23_4);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 2 : 
                   	int LA23_5 = input.LA(1);

                   	 
                   	int index23_5 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred43_ObjectiveC2ansi()) ) { s = 20; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index23_5);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 3 : 
                   	int LA23_6 = input.LA(1);

                   	 
                   	int index23_6 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred43_ObjectiveC2ansi()) ) { s = 20; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index23_6);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 4 : 
                   	int LA23_7 = input.LA(1);

                   	 
                   	int index23_7 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred43_ObjectiveC2ansi()) ) { s = 20; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index23_7);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 5 : 
                   	int LA23_8 = input.LA(1);

                   	 
                   	int index23_8 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred43_ObjectiveC2ansi()) ) { s = 20; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index23_8);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 6 : 
                   	int LA23_9 = input.LA(1);

                   	 
                   	int index23_9 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred43_ObjectiveC2ansi()) ) { s = 20; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index23_9);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 7 : 
                   	int LA23_10 = input.LA(1);

                   	 
                   	int index23_10 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred43_ObjectiveC2ansi()) ) { s = 20; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index23_10);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 8 : 
                   	int LA23_11 = input.LA(1);

                   	 
                   	int index23_11 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred43_ObjectiveC2ansi()) ) { s = 20; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index23_11);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 9 : 
                   	int LA23_12 = input.LA(1);

                   	 
                   	int index23_12 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred43_ObjectiveC2ansi()) ) { s = 20; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index23_12);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 10 : 
                   	int LA23_13 = input.LA(1);

                   	 
                   	int index23_13 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred43_ObjectiveC2ansi()) ) { s = 20; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index23_13);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 11 : 
                   	int LA23_14 = input.LA(1);

                   	 
                   	int index23_14 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred43_ObjectiveC2ansi()) ) { s = 20; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index23_14);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 12 : 
                   	int LA23_15 = input.LA(1);

                   	 
                   	int index23_15 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred43_ObjectiveC2ansi()) ) { s = 20; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index23_15);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 13 : 
                   	int LA23_16 = input.LA(1);

                   	 
                   	int index23_16 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred43_ObjectiveC2ansi()) ) { s = 20; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index23_16);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 14 : 
                   	int LA23_17 = input.LA(1);

                   	 
                   	int index23_17 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred43_ObjectiveC2ansi()) ) { s = 20; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index23_17);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 15 : 
                   	int LA23_18 = input.LA(1);

                   	 
                   	int index23_18 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred43_ObjectiveC2ansi()) ) { s = 20; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index23_18);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae23 =
            new NoViableAltException(dfa.Description, 23, _s, input);
        dfa.Error(nvae23);
        throw nvae23;
    }
    const string DFA28_eotS =
        "\x1A\xFFFF";
    const string DFA28_eofS =
        "\x1\x1\x19\xFFFF";
    const string DFA28_minS =
        "\x1\xD\x4\xFFFF\x11\x0\x4\xFFFF";
    const string DFA28_maxS =
        "\x1\x90\x4\xFFFF\x11\x0\x4\xFFFF";
    const string DFA28_acceptS =
        "\x1\xFFFF\x1\x7\x1\xFFFF\x1\x1\x1\x2\x11\xFFFF\x1\x5\x1\x6\x1\x3"+
        "\x1\x4";
    const string DFA28_specialS =
        "\x5\xFFFF\x1\x0\x1\x1\x1\x2\x1\x3\x1\x4\x1\x5\x1\x6\x1\x7\x1\x8"+
        "\x1\x9\x1\xA\x1\xB\x1\xC\x1\xD\x1\xE\x1\xF\x1\x10\x4\xFFFF}>";
    static readonly string[] DFA28_transitionS = {
            "\x1\x10\x8\xFFFF\x1\x17\x20\xFFFF\x1\x4\x1\xFFFF\x1\x1\xB\xFFFF"+
            "\x1\x3\xD\xFFFF\x1\x16\x10\xFFFF\x1\x5\x1\xFFFF\x2\x15\x1\xFFFF"+
            "\x1\x7\x1\x13\x4\xFFFF\x1\xC\x1\xFFFF\x1\x12\x1\x5\x1\xB\x2"+
            "\xFFFF\x1\xF\x1\xFFFF\x2\x15\x1\x9\x1\xA\x1\xFFFF\x2\x15\x2"+
            "\xFFFF\x1\x5\x3\xFFFF\x1\x8\x1\xD\x1\xFFFF\x1\x5\x1\x11\x2\xFFFF"+
            "\x1\x5\x1\x11\x1\xE\x1\x6\x1\x14",
            "",
            "",
            "",
            "",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA28_eot = DFA.UnpackEncodedString(DFA28_eotS);
    static readonly short[] DFA28_eof = DFA.UnpackEncodedString(DFA28_eofS);
    static readonly char[] DFA28_min = DFA.UnpackEncodedStringToUnsignedChars(DFA28_minS);
    static readonly char[] DFA28_max = DFA.UnpackEncodedStringToUnsignedChars(DFA28_maxS);
    static readonly short[] DFA28_accept = DFA.UnpackEncodedString(DFA28_acceptS);
    static readonly short[] DFA28_special = DFA.UnpackEncodedString(DFA28_specialS);
    static readonly short[][] DFA28_transition = DFA.UnpackEncodedStringArray(DFA28_transitionS);

    protected class DFA28 : DFA
    {
        public DFA28(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 28;
            this.eot = DFA28_eot;
            this.eof = DFA28_eof;
            this.min = DFA28_min;
            this.max = DFA28_max;
            this.accept = DFA28_accept;
            this.special = DFA28_special;
            this.transition = DFA28_transition;

        }

        override public string Description
        {
            get { return "()* loopback of 154:2: ( synthesize_statement | dynamic_statement | function_definition | declaration | class_method_definition | instance_method_definition )*"; }
        }

    }


    protected internal int DFA28_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA28_5 = input.LA(1);

                   	 
                   	int index28_5 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred55_ObjectiveC2ansi()) ) { s = 24; }

                   	else if ( (synpred56_ObjectiveC2ansi()) ) { s = 25; }

                   	 
                   	input.Seek(index28_5);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 1 : 
                   	int LA28_6 = input.LA(1);

                   	 
                   	int index28_6 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred55_ObjectiveC2ansi()) ) { s = 24; }

                   	else if ( (synpred56_ObjectiveC2ansi()) ) { s = 25; }

                   	 
                   	input.Seek(index28_6);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 2 : 
                   	int LA28_7 = input.LA(1);

                   	 
                   	int index28_7 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred55_ObjectiveC2ansi()) ) { s = 24; }

                   	else if ( (synpred56_ObjectiveC2ansi()) ) { s = 25; }

                   	 
                   	input.Seek(index28_7);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 3 : 
                   	int LA28_8 = input.LA(1);

                   	 
                   	int index28_8 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred55_ObjectiveC2ansi()) ) { s = 24; }

                   	else if ( (synpred56_ObjectiveC2ansi()) ) { s = 25; }

                   	 
                   	input.Seek(index28_8);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 4 : 
                   	int LA28_9 = input.LA(1);

                   	 
                   	int index28_9 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred55_ObjectiveC2ansi()) ) { s = 24; }

                   	else if ( (synpred56_ObjectiveC2ansi()) ) { s = 25; }

                   	 
                   	input.Seek(index28_9);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 5 : 
                   	int LA28_10 = input.LA(1);

                   	 
                   	int index28_10 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred55_ObjectiveC2ansi()) ) { s = 24; }

                   	else if ( (synpred56_ObjectiveC2ansi()) ) { s = 25; }

                   	 
                   	input.Seek(index28_10);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 6 : 
                   	int LA28_11 = input.LA(1);

                   	 
                   	int index28_11 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred55_ObjectiveC2ansi()) ) { s = 24; }

                   	else if ( (synpred56_ObjectiveC2ansi()) ) { s = 25; }

                   	 
                   	input.Seek(index28_11);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 7 : 
                   	int LA28_12 = input.LA(1);

                   	 
                   	int index28_12 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred55_ObjectiveC2ansi()) ) { s = 24; }

                   	else if ( (synpred56_ObjectiveC2ansi()) ) { s = 25; }

                   	 
                   	input.Seek(index28_12);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 8 : 
                   	int LA28_13 = input.LA(1);

                   	 
                   	int index28_13 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred55_ObjectiveC2ansi()) ) { s = 24; }

                   	else if ( (synpred56_ObjectiveC2ansi()) ) { s = 25; }

                   	 
                   	input.Seek(index28_13);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 9 : 
                   	int LA28_14 = input.LA(1);

                   	 
                   	int index28_14 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred55_ObjectiveC2ansi()) ) { s = 24; }

                   	else if ( (synpred56_ObjectiveC2ansi()) ) { s = 25; }

                   	 
                   	input.Seek(index28_14);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 10 : 
                   	int LA28_15 = input.LA(1);

                   	 
                   	int index28_15 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred55_ObjectiveC2ansi()) ) { s = 24; }

                   	else if ( (synpred56_ObjectiveC2ansi()) ) { s = 25; }

                   	 
                   	input.Seek(index28_15);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 11 : 
                   	int LA28_16 = input.LA(1);

                   	 
                   	int index28_16 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred55_ObjectiveC2ansi()) ) { s = 24; }

                   	else if ( (synpred56_ObjectiveC2ansi()) ) { s = 25; }

                   	 
                   	input.Seek(index28_16);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 12 : 
                   	int LA28_17 = input.LA(1);

                   	 
                   	int index28_17 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred55_ObjectiveC2ansi()) ) { s = 24; }

                   	else if ( (synpred56_ObjectiveC2ansi()) ) { s = 25; }

                   	 
                   	input.Seek(index28_17);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 13 : 
                   	int LA28_18 = input.LA(1);

                   	 
                   	int index28_18 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred55_ObjectiveC2ansi()) ) { s = 24; }

                   	else if ( (synpred56_ObjectiveC2ansi()) ) { s = 25; }

                   	 
                   	input.Seek(index28_18);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 14 : 
                   	int LA28_19 = input.LA(1);

                   	 
                   	int index28_19 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred55_ObjectiveC2ansi()) ) { s = 24; }

                   	else if ( (synpred56_ObjectiveC2ansi()) ) { s = 25; }

                   	 
                   	input.Seek(index28_19);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 15 : 
                   	int LA28_20 = input.LA(1);

                   	 
                   	int index28_20 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred55_ObjectiveC2ansi()) ) { s = 24; }

                   	else if ( (synpred56_ObjectiveC2ansi()) ) { s = 25; }

                   	 
                   	input.Seek(index28_20);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 16 : 
                   	int LA28_21 = input.LA(1);

                   	 
                   	int index28_21 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred55_ObjectiveC2ansi()) ) { s = 24; }

                   	else if ( (synpred56_ObjectiveC2ansi()) ) { s = 25; }

                   	 
                   	input.Seek(index28_21);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae28 =
            new NoViableAltException(dfa.Description, 28, _s, input);
        dfa.Error(nvae28);
        throw nvae28;
    }
    const string DFA38_eotS =
        "\x10\xFFFF";
    const string DFA38_eofS =
        "\x10\xFFFF";
    const string DFA38_minS =
        "\x1\xD\xA\xFFFF\x1\x0\x4\xFFFF";
    const string DFA38_maxS =
        "\x1\x8F\xA\xFFFF\x1\x0\x4\xFFFF";
    const string DFA38_acceptS =
        "\x1\xFFFF\x1\x1\x1\x2\x1\x3\x1\x4\x1\x5\x1\x6\x1\x7\x1\x8\x1\x9"+
        "\x1\xA\x1\xFFFF\x1\xC\x1\xD\x1\xB\x1\xE";
    const string DFA38_specialS =
        "\xB\xFFFF\x1\x0\x4\xFFFF}>";
    static readonly string[] DFA38_transitionS = {
            "\x1\xB\x5B\xFFFF\x1\x2\x5\xFFFF\x1\x7\x1\xFFFF\x1\xD\x1\xFFFF"+
            "\x1\x6\x2\xFFFF\x1\xA\x3\xFFFF\x1\x4\x1\x5\x9\xFFFF\x1\x3\x1"+
            "\x8\x2\xFFFF\x1\xC\x3\xFFFF\x1\xC\x1\x9\x1\x1",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x1\xFFFF",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA38_eot = DFA.UnpackEncodedString(DFA38_eotS);
    static readonly short[] DFA38_eof = DFA.UnpackEncodedString(DFA38_eofS);
    static readonly char[] DFA38_min = DFA.UnpackEncodedStringToUnsignedChars(DFA38_minS);
    static readonly char[] DFA38_max = DFA.UnpackEncodedStringToUnsignedChars(DFA38_maxS);
    static readonly short[] DFA38_accept = DFA.UnpackEncodedString(DFA38_acceptS);
    static readonly short[] DFA38_special = DFA.UnpackEncodedString(DFA38_specialS);
    static readonly short[][] DFA38_transition = DFA.UnpackEncodedStringArray(DFA38_transitionS);

    protected class DFA38 : DFA
    {
        public DFA38(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 38;
            this.eot = DFA38_eot;
            this.eof = DFA38_eof;
            this.min = DFA38_min;
            this.max = DFA38_max;
            this.accept = DFA38_accept;
            this.special = DFA38_special;
            this.transition = DFA38_transition;

        }

        override public string Description
        {
            get { return "180:0: type_specifier : ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | ( 'id' ( protocol_reference_list )? ) | ( class_name ( protocol_reference_list )? ) | struct_or_union_specifier | enum_specifier | IDENTIFIER );"; }
        }

    }


    protected internal int DFA38_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA38_11 = input.LA(1);

                   	 
                   	int index38_11 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred78_ObjectiveC2ansi()) ) { s = 14; }

                   	else if ( (true) ) { s = 15; }

                   	 
                   	input.Seek(index38_11);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae38 =
            new NoViableAltException(dfa.Description, 38, _s, input);
        dfa.Error(nvae38);
        throw nvae38;
    }
    const string DFA59_eotS =
        "\x17\xFFFF";
    const string DFA59_eofS =
        "\x1\x11\x16\xFFFF";
    const string DFA59_minS =
        "\x1\xD\xA\xFFFF\x1\x0\xB\xFFFF";
    const string DFA59_maxS =
        "\x1\x90\xA\xFFFF\x1\x0\xB\xFFFF";
    const string DFA59_acceptS =
        "\x1\xFFFF\x1\x1\xF\xFFFF\x1\x2\x5\xFFFF";
    const string DFA59_specialS =
        "\xB\xFFFF\x1\x0\xB\xFFFF}>";
    static readonly string[] DFA59_transitionS = {
            "\x1\xB\x1A\xFFFF\x3\x11\x7\xFFFF\x1\x11\x15\xFFFF\x1\x11\x1D"+
            "\xFFFF\x2\x1\x1\xFFFF\x2\x1\x4\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1"+
            "\xFFFF\x1\x1\x2\xFFFF\x1\x1\x1\xFFFF\x4\x1\x1\xFFFF\x2\x1\x6"+
            "\xFFFF\x2\x1\x2\xFFFF\x1\x1\x3\xFFFF\x4\x1",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x1\xFFFF",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA59_eot = DFA.UnpackEncodedString(DFA59_eotS);
    static readonly short[] DFA59_eof = DFA.UnpackEncodedString(DFA59_eofS);
    static readonly char[] DFA59_min = DFA.UnpackEncodedStringToUnsignedChars(DFA59_minS);
    static readonly char[] DFA59_max = DFA.UnpackEncodedStringToUnsignedChars(DFA59_maxS);
    static readonly short[] DFA59_accept = DFA.UnpackEncodedString(DFA59_acceptS);
    static readonly short[] DFA59_special = DFA.UnpackEncodedString(DFA59_specialS);
    static readonly short[][] DFA59_transition = DFA.UnpackEncodedStringArray(DFA59_transitionS);

    protected class DFA59 : DFA
    {
        public DFA59(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 59;
            this.eot = DFA59_eot;
            this.eof = DFA59_eof;
            this.min = DFA59_min;
            this.max = DFA59_max;
            this.accept = DFA59_accept;
            this.special = DFA59_special;
            this.transition = DFA59_transition;

        }

        override public string Description
        {
            get { return "288:45: ( specifier_qualifier_list )?"; }
        }

    }


    protected internal int DFA59_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA59_11 = input.LA(1);

                   	 
                   	int index59_11 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred128_ObjectiveC2ansi()) ) { s = 1; }

                   	else if ( (true) ) { s = 17; }

                   	 
                   	input.Seek(index59_11);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae59 =
            new NoViableAltException(dfa.Description, 59, _s, input);
        dfa.Error(nvae59);
        throw nvae59;
    }
    const string DFA61_eotS =
        "\x1C\xFFFF";
    const string DFA61_eofS =
        "\x1\x2\x1B\xFFFF";
    const string DFA61_minS =
        "\x1\xD\x1\x0\x1A\xFFFF";
    const string DFA61_maxS =
        "\x1\x90\x1\x0\x1A\xFFFF";
    const string DFA61_acceptS =
        "\x2\xFFFF\x1\x2\x18\xFFFF\x1\x1";
    const string DFA61_specialS =
        "\x1\xFFFF\x1\x0\x1A\xFFFF}>";
    static readonly string[] DFA61_transitionS = {
            "\x1\x2\x1A\xFFFF\x3\x2\x1\xFFFF\x1\x2\x5\xFFFF\x2\x2\x14\xFFFF"+
            "\x1\x2\x4\xFFFF\x1\x1\x16\xFFFF\x1\x2\x1\xFFFF\x2\x2\x1\xFFFF"+
            "\x2\x2\x4\xFFFF\x1\x2\x1\xFFFF\x3\x2\x2\xFFFF\x1\x2\x1\xFFFF"+
            "\x4\x2\x1\xFFFF\x2\x2\x2\xFFFF\x1\x2\x3\xFFFF\x2\x2\x1\xFFFF"+
            "\x2\x2\x2\xFFFF\x5\x2",
            "\x1\xFFFF",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA61_eot = DFA.UnpackEncodedString(DFA61_eotS);
    static readonly short[] DFA61_eof = DFA.UnpackEncodedString(DFA61_eofS);
    static readonly char[] DFA61_min = DFA.UnpackEncodedStringToUnsignedChars(DFA61_minS);
    static readonly char[] DFA61_max = DFA.UnpackEncodedStringToUnsignedChars(DFA61_maxS);
    static readonly short[] DFA61_accept = DFA.UnpackEncodedString(DFA61_acceptS);
    static readonly short[] DFA61_special = DFA.UnpackEncodedString(DFA61_specialS);
    static readonly short[][] DFA61_transition = DFA.UnpackEncodedStringArray(DFA61_transitionS);

    protected class DFA61 : DFA
    {
        public DFA61(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 61;
            this.eot = DFA61_eot;
            this.eof = DFA61_eof;
            this.min = DFA61_min;
            this.max = DFA61_max;
            this.accept = DFA61_accept;
            this.special = DFA61_special;
            this.transition = DFA61_transition;

        }

        override public string Description
        {
            get { return "299:16: ( '{' enumerator_list '}' )?"; }
        }

    }


    protected internal int DFA61_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA61_1 = input.LA(1);

                   	 
                   	int index61_1 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred131_ObjectiveC2ansi()) ) { s = 27; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index61_1);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae61 =
            new NoViableAltException(dfa.Description, 61, _s, input);
        dfa.Error(nvae61);
        throw nvae61;
    }
    const string DFA66_eotS =
        "\x9\xFFFF";
    const string DFA66_eofS =
        "\x1\xFFFF\x1\x2\x1\xFFFF\x3\x7\x3\xFFFF";
    const string DFA66_minS =
        "\x1\x2A\x1\xD\x1\xFFFF\x3\xD\x3\xFFFF";
    const string DFA66_maxS =
        "\x1\x2A\x1\x90\x1\xFFFF\x3\x90\x3\xFFFF";
    const string DFA66_acceptS =
        "\x2\xFFFF\x1\x1\x3\xFFFF\x1\x3\x1\x2\x1\x4";
    const string DFA66_specialS =
        "\x9\xFFFF}>";
    static readonly string[] DFA66_transitionS = {
            "\x1\x1",
            "\x1\x2\x1A\xFFFF\x1\x2\x1\xFFFF\x1\x6\x3B\xFFFF\x2\x5\x2\xFFFF"+
            "\x1\x3\xD\xFFFF\x2\x5\x3\xFFFF\x2\x5\x11\xFFFF\x1\x4",
            "",
            "\x1\x7\x1A\xFFFF\x1\x7\x1\xFFFF\x1\x8\x3B\xFFFF\x2\x5\x2\xFFFF"+
            "\x1\x3\xD\xFFFF\x2\x5\x3\xFFFF\x2\x5\x11\xFFFF\x1\x4",
            "\x1\x7\x1A\xFFFF\x1\x7\x1\xFFFF\x1\x8\x3B\xFFFF\x2\x5\x2\xFFFF"+
            "\x1\x3\xD\xFFFF\x2\x5\x3\xFFFF\x2\x5\x11\xFFFF\x1\x4",
            "\x1\x7\x1A\xFFFF\x1\x7\x1\xFFFF\x1\x8\x3B\xFFFF\x2\x5\x2\xFFFF"+
            "\x1\x3\xD\xFFFF\x2\x5\x3\xFFFF\x2\x5\x11\xFFFF\x1\x4",
            "",
            "",
            ""
    };

    static readonly short[] DFA66_eot = DFA.UnpackEncodedString(DFA66_eotS);
    static readonly short[] DFA66_eof = DFA.UnpackEncodedString(DFA66_eofS);
    static readonly char[] DFA66_min = DFA.UnpackEncodedStringToUnsignedChars(DFA66_minS);
    static readonly char[] DFA66_max = DFA.UnpackEncodedStringToUnsignedChars(DFA66_maxS);
    static readonly short[] DFA66_accept = DFA.UnpackEncodedString(DFA66_acceptS);
    static readonly short[] DFA66_special = DFA.UnpackEncodedString(DFA66_specialS);
    static readonly short[][] DFA66_transition = DFA.UnpackEncodedStringArray(DFA66_transitionS);

    protected class DFA66 : DFA
    {
        public DFA66(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 66;
            this.eot = DFA66_eot;
            this.eof = DFA66_eof;
            this.min = DFA66_min;
            this.max = DFA66_max;
            this.accept = DFA66_accept;
            this.special = DFA66_special;
            this.transition = DFA66_transition;

        }

        override public string Description
        {
            get { return "309:0: pointer : ( '*' | '*' type_qualifier_list | '*' pointer | '*' type_qualifier_list pointer );"; }
        }

    }

    const string DFA69_eotS =
        "\x11\xFFFF";
    const string DFA69_eofS =
        "\x1\x1\x10\xFFFF";
    const string DFA69_minS =
        "\x1\xD\x9\xFFFF\x2\x0\x5\xFFFF";
    const string DFA69_maxS =
        "\x1\x5A\x9\xFFFF\x2\x0\x5\xFFFF";
    const string DFA69_acceptS =
        "\x1\xFFFF\x1\x6\xA\xFFFF\x1\x3\x1\x4\x1\x5\x1\x1\x1\x2";
    const string DFA69_specialS =
        "\xA\xFFFF\x1\x0\x1\x1\x5\xFFFF}>";
    static readonly string[] DFA69_transitionS = {
            "\x1\x1\x1A\xFFFF\x1\xA\x2\x1\x1\xFFFF\x1\x1\x5\xFFFF\x2\x1\x14"+
            "\xFFFF\x1\xB\x4\xFFFF\x1\x1\xC\xFFFF\x1\x1",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA69_eot = DFA.UnpackEncodedString(DFA69_eotS);
    static readonly short[] DFA69_eof = DFA.UnpackEncodedString(DFA69_eofS);
    static readonly char[] DFA69_min = DFA.UnpackEncodedStringToUnsignedChars(DFA69_minS);
    static readonly char[] DFA69_max = DFA.UnpackEncodedStringToUnsignedChars(DFA69_maxS);
    static readonly short[] DFA69_accept = DFA.UnpackEncodedString(DFA69_acceptS);
    static readonly short[] DFA69_special = DFA.UnpackEncodedString(DFA69_specialS);
    static readonly short[][] DFA69_transition = DFA.UnpackEncodedStringArray(DFA69_transitionS);

    protected class DFA69 : DFA
    {
        public DFA69(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 69;
            this.eot = DFA69_eot;
            this.eof = DFA69_eof;
            this.min = DFA69_min;
            this.max = DFA69_max;
            this.accept = DFA69_accept;
            this.special = DFA69_special;
            this.transition = DFA69_transition;

        }

        override public string Description
        {
            get { return "()* loopback of 319:2: ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' )*"; }
        }

    }


    protected internal int DFA69_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA69_10 = input.LA(1);

                   	 
                   	int index69_10 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred143_ObjectiveC2ansi()) ) { s = 12; }

                   	else if ( (synpred144_ObjectiveC2ansi()) ) { s = 13; }

                   	else if ( (synpred145_ObjectiveC2ansi()) ) { s = 14; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index69_10);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 1 : 
                   	int LA69_11 = input.LA(1);

                   	 
                   	int index69_11 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred141_ObjectiveC2ansi()) ) { s = 15; }

                   	else if ( (synpred142_ObjectiveC2ansi()) ) { s = 16; }

                   	 
                   	input.Seek(index69_11);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae69 =
            new NoViableAltException(dfa.Description, 69, _s, input);
        dfa.Error(nvae69);
        throw nvae69;
    }
    const string DFA71_eotS =
        "\x14\xFFFF";
    const string DFA71_eofS =
        "\x14\xFFFF";
    const string DFA71_minS =
        "\x1\xD\x11\x0\x2\xFFFF";
    const string DFA71_maxS =
        "\x1\x90\x11\x0\x2\xFFFF";
    const string DFA71_acceptS =
        "\x12\xFFFF\x1\x1\x1\x2";
    const string DFA71_specialS =
        "\x1\xFFFF\x1\x0\x1\x1\x1\x2\x1\x3\x1\x4\x1\x5\x1\x6\x1\x7\x1\x8"+
        "\x1\x9\x1\xA\x1\xB\x1\xC\x1\xD\x1\xE\x1\xF\x1\x10\x2\xFFFF}>";
    static readonly string[] DFA71_transitionS = {
            "\x1\xC\x56\xFFFF\x1\x1\x1\xFFFF\x2\x11\x1\xFFFF\x1\x3\x1\xF"+
            "\x4\xFFFF\x1\x8\x1\xFFFF\x1\xE\x1\x1\x1\x7\x2\xFFFF\x1\xB\x1"+
            "\xFFFF\x2\x11\x1\x5\x1\x6\x1\xFFFF\x2\x11\x2\xFFFF\x1\x1\x3"+
            "\xFFFF\x1\x4\x1\x9\x1\xFFFF\x1\x1\x1\xD\x2\xFFFF\x1\x1\x1\xD"+
            "\x1\xA\x1\x2\x1\x10",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "",
            ""
    };

    static readonly short[] DFA71_eot = DFA.UnpackEncodedString(DFA71_eotS);
    static readonly short[] DFA71_eof = DFA.UnpackEncodedString(DFA71_eofS);
    static readonly char[] DFA71_min = DFA.UnpackEncodedStringToUnsignedChars(DFA71_minS);
    static readonly char[] DFA71_max = DFA.UnpackEncodedStringToUnsignedChars(DFA71_maxS);
    static readonly short[] DFA71_accept = DFA.UnpackEncodedString(DFA71_acceptS);
    static readonly short[] DFA71_special = DFA.UnpackEncodedString(DFA71_specialS);
    static readonly short[][] DFA71_transition = DFA.UnpackEncodedStringArray(DFA71_transitionS);

    protected class DFA71 : DFA
    {
        public DFA71(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 71;
            this.eot = DFA71_eot;
            this.eof = DFA71_eof;
            this.min = DFA71_min;
            this.max = DFA71_max;
            this.accept = DFA71_accept;
            this.special = DFA71_special;
            this.transition = DFA71_transition;

        }

        override public string Description
        {
            get { return "326:0: parameter_type_list : ( parameter_list | parameter_list ( ',' '...' ) );"; }
        }

    }


    protected internal int DFA71_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA71_1 = input.LA(1);

                   	 
                   	int index71_1 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred147_ObjectiveC2ansi()) ) { s = 18; }

                   	else if ( (true) ) { s = 19; }

                   	 
                   	input.Seek(index71_1);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 1 : 
                   	int LA71_2 = input.LA(1);

                   	 
                   	int index71_2 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred147_ObjectiveC2ansi()) ) { s = 18; }

                   	else if ( (true) ) { s = 19; }

                   	 
                   	input.Seek(index71_2);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 2 : 
                   	int LA71_3 = input.LA(1);

                   	 
                   	int index71_3 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred147_ObjectiveC2ansi()) ) { s = 18; }

                   	else if ( (true) ) { s = 19; }

                   	 
                   	input.Seek(index71_3);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 3 : 
                   	int LA71_4 = input.LA(1);

                   	 
                   	int index71_4 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred147_ObjectiveC2ansi()) ) { s = 18; }

                   	else if ( (true) ) { s = 19; }

                   	 
                   	input.Seek(index71_4);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 4 : 
                   	int LA71_5 = input.LA(1);

                   	 
                   	int index71_5 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred147_ObjectiveC2ansi()) ) { s = 18; }

                   	else if ( (true) ) { s = 19; }

                   	 
                   	input.Seek(index71_5);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 5 : 
                   	int LA71_6 = input.LA(1);

                   	 
                   	int index71_6 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred147_ObjectiveC2ansi()) ) { s = 18; }

                   	else if ( (true) ) { s = 19; }

                   	 
                   	input.Seek(index71_6);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 6 : 
                   	int LA71_7 = input.LA(1);

                   	 
                   	int index71_7 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred147_ObjectiveC2ansi()) ) { s = 18; }

                   	else if ( (true) ) { s = 19; }

                   	 
                   	input.Seek(index71_7);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 7 : 
                   	int LA71_8 = input.LA(1);

                   	 
                   	int index71_8 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred147_ObjectiveC2ansi()) ) { s = 18; }

                   	else if ( (true) ) { s = 19; }

                   	 
                   	input.Seek(index71_8);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 8 : 
                   	int LA71_9 = input.LA(1);

                   	 
                   	int index71_9 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred147_ObjectiveC2ansi()) ) { s = 18; }

                   	else if ( (true) ) { s = 19; }

                   	 
                   	input.Seek(index71_9);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 9 : 
                   	int LA71_10 = input.LA(1);

                   	 
                   	int index71_10 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred147_ObjectiveC2ansi()) ) { s = 18; }

                   	else if ( (true) ) { s = 19; }

                   	 
                   	input.Seek(index71_10);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 10 : 
                   	int LA71_11 = input.LA(1);

                   	 
                   	int index71_11 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred147_ObjectiveC2ansi()) ) { s = 18; }

                   	else if ( (true) ) { s = 19; }

                   	 
                   	input.Seek(index71_11);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 11 : 
                   	int LA71_12 = input.LA(1);

                   	 
                   	int index71_12 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred147_ObjectiveC2ansi()) ) { s = 18; }

                   	else if ( (true) ) { s = 19; }

                   	 
                   	input.Seek(index71_12);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 12 : 
                   	int LA71_13 = input.LA(1);

                   	 
                   	int index71_13 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred147_ObjectiveC2ansi()) ) { s = 18; }

                   	else if ( (true) ) { s = 19; }

                   	 
                   	input.Seek(index71_13);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 13 : 
                   	int LA71_14 = input.LA(1);

                   	 
                   	int index71_14 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred147_ObjectiveC2ansi()) ) { s = 18; }

                   	else if ( (true) ) { s = 19; }

                   	 
                   	input.Seek(index71_14);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 14 : 
                   	int LA71_15 = input.LA(1);

                   	 
                   	int index71_15 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred147_ObjectiveC2ansi()) ) { s = 18; }

                   	else if ( (true) ) { s = 19; }

                   	 
                   	input.Seek(index71_15);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 15 : 
                   	int LA71_16 = input.LA(1);

                   	 
                   	int index71_16 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred147_ObjectiveC2ansi()) ) { s = 18; }

                   	else if ( (true) ) { s = 19; }

                   	 
                   	input.Seek(index71_16);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 16 : 
                   	int LA71_17 = input.LA(1);

                   	 
                   	int index71_17 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred147_ObjectiveC2ansi()) ) { s = 18; }

                   	else if ( (true) ) { s = 19; }

                   	 
                   	input.Seek(index71_17);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae71 =
            new NoViableAltException(dfa.Description, 71, _s, input);
        dfa.Error(nvae71);
        throw nvae71;
    }
    const string DFA76_eotS =
        "\xC\xFFFF";
    const string DFA76_eofS =
        "\x1\x9\xB\xFFFF";
    const string DFA76_minS =
        "\x1\xD\x3\x0\x1\xFFFF\x5\x0\x2\xFFFF";
    const string DFA76_maxS =
        "\x1\x4D\x3\x0\x1\xFFFF\x5\x0\x2\xFFFF";
    const string DFA76_acceptS =
        "\x4\xFFFF\x1\x2\x5\xFFFF\x1\x1\x1\x3";
    const string DFA76_specialS =
        "\x1\xFFFF\x1\x0\x1\x1\x1\x2\x1\xFFFF\x1\x3\x1\x4\x1\x5\x1\x6\x1"+
        "\x7\x2\xFFFF}>";
    static readonly string[] DFA76_transitionS = {
            "\x1\x2\x1A\xFFFF\x1\x3\x1\x8\x1\x1\x1\xFFFF\x1\x5\x6\xFFFF\x1"+
            "\x6\x14\xFFFF\x1\x4\x4\xFFFF\x1\x7",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "",
            ""
    };

    static readonly short[] DFA76_eot = DFA.UnpackEncodedString(DFA76_eotS);
    static readonly short[] DFA76_eof = DFA.UnpackEncodedString(DFA76_eofS);
    static readonly char[] DFA76_min = DFA.UnpackEncodedStringToUnsignedChars(DFA76_minS);
    static readonly char[] DFA76_max = DFA.UnpackEncodedStringToUnsignedChars(DFA76_maxS);
    static readonly short[] DFA76_accept = DFA.UnpackEncodedString(DFA76_acceptS);
    static readonly short[] DFA76_special = DFA.UnpackEncodedString(DFA76_specialS);
    static readonly short[][] DFA76_transition = DFA.UnpackEncodedStringArray(DFA76_transitionS);

    protected class DFA76 : DFA
    {
        public DFA76(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 76;
            this.eot = DFA76_eot;
            this.eof = DFA76_eof;
            this.min = DFA76_min;
            this.max = DFA76_max;
            this.accept = DFA76_accept;
            this.special = DFA76_special;
            this.transition = DFA76_transition;

        }

        override public string Description
        {
            get { return "340:28: ( declarator | abstract_declarator )?"; }
        }

    }


    protected internal int DFA76_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA76_1 = input.LA(1);

                   	 
                   	int index76_1 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred152_ObjectiveC2ansi()) ) { s = 10; }

                   	else if ( (synpred153_ObjectiveC2ansi()) ) { s = 4; }

                   	else if ( (true) ) { s = 11; }

                   	 
                   	input.Seek(index76_1);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 1 : 
                   	int LA76_2 = input.LA(1);

                   	 
                   	int index76_2 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred152_ObjectiveC2ansi()) ) { s = 10; }

                   	else if ( (synpred153_ObjectiveC2ansi()) ) { s = 4; }

                   	else if ( (true) ) { s = 11; }

                   	 
                   	input.Seek(index76_2);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 2 : 
                   	int LA76_3 = input.LA(1);

                   	 
                   	int index76_3 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred152_ObjectiveC2ansi()) ) { s = 10; }

                   	else if ( (synpred153_ObjectiveC2ansi()) ) { s = 4; }

                   	else if ( (true) ) { s = 11; }

                   	 
                   	input.Seek(index76_3);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 3 : 
                   	int LA76_5 = input.LA(1);

                   	 
                   	int index76_5 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred153_ObjectiveC2ansi()) ) { s = 4; }

                   	else if ( (true) ) { s = 11; }

                   	 
                   	input.Seek(index76_5);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 4 : 
                   	int LA76_6 = input.LA(1);

                   	 
                   	int index76_6 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred153_ObjectiveC2ansi()) ) { s = 4; }

                   	else if ( (true) ) { s = 11; }

                   	 
                   	input.Seek(index76_6);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 5 : 
                   	int LA76_7 = input.LA(1);

                   	 
                   	int index76_7 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred153_ObjectiveC2ansi()) ) { s = 4; }

                   	else if ( (true) ) { s = 11; }

                   	 
                   	input.Seek(index76_7);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 6 : 
                   	int LA76_8 = input.LA(1);

                   	 
                   	int index76_8 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred153_ObjectiveC2ansi()) ) { s = 4; }

                   	else if ( (true) ) { s = 11; }

                   	 
                   	input.Seek(index76_8);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 7 : 
                   	int LA76_9 = input.LA(1);

                   	 
                   	int index76_9 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred153_ObjectiveC2ansi()) ) { s = 4; }

                   	else if ( (true) ) { s = 11; }

                   	 
                   	input.Seek(index76_9);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae76 =
            new NoViableAltException(dfa.Description, 76, _s, input);
        dfa.Error(nvae76);
        throw nvae76;
    }
    const string DFA83_eotS =
        "\xC\xFFFF";
    const string DFA83_eofS =
        "\x1\x4\xB\xFFFF";
    const string DFA83_minS =
        "\x1\xD\x2\x0\x9\xFFFF";
    const string DFA83_maxS =
        "\x1\x4D\x2\x0\x9\xFFFF";
    const string DFA83_acceptS =
        "\x3\xFFFF\x1\x3\x1\x4\x5\xFFFF\x1\x1\x1\x2";
    const string DFA83_specialS =
        "\x1\xFFFF\x1\x0\x1\x1\x9\xFFFF}>";
    static readonly string[] DFA83_transitionS = {
            "\x1\x4\x1A\xFFFF\x1\x2\x1\x4\x1\x1\x1\xFFFF\x1\x4\x6\xFFFF\x1"+
            "\x4\x14\xFFFF\x1\x3\x4\xFFFF\x1\x4",
            "\x1\xFFFF",
            "\x1\xFFFF",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA83_eot = DFA.UnpackEncodedString(DFA83_eotS);
    static readonly short[] DFA83_eof = DFA.UnpackEncodedString(DFA83_eofS);
    static readonly char[] DFA83_min = DFA.UnpackEncodedStringToUnsignedChars(DFA83_minS);
    static readonly char[] DFA83_max = DFA.UnpackEncodedStringToUnsignedChars(DFA83_maxS);
    static readonly short[] DFA83_accept = DFA.UnpackEncodedString(DFA83_acceptS);
    static readonly short[] DFA83_special = DFA.UnpackEncodedString(DFA83_specialS);
    static readonly short[][] DFA83_transition = DFA.UnpackEncodedStringArray(DFA83_transitionS);

    protected class DFA83 : DFA
    {
        public DFA83(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 83;
            this.eot = DFA83_eot;
            this.eof = DFA83_eof;
            this.min = DFA83_min;
            this.max = DFA83_max;
            this.accept = DFA83_accept;
            this.special = DFA83_special;
            this.transition = DFA83_transition;

        }

        override public string Description
        {
            get { return "347:0: abstract_declarator : ( '*' ( type_qualifier )* abstract_declarator | '(' abstract_declarator ')' ( abstract_declarator_suffix )+ | ( '[' ( constant_expression )? ']' )+ |);"; }
        }

    }


    protected internal int DFA83_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA83_1 = input.LA(1);

                   	 
                   	int index83_1 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred157_ObjectiveC2ansi()) ) { s = 10; }

                   	else if ( (true) ) { s = 4; }

                   	 
                   	input.Seek(index83_1);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 1 : 
                   	int LA83_2 = input.LA(1);

                   	 
                   	int index83_2 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred159_ObjectiveC2ansi()) ) { s = 11; }

                   	else if ( (true) ) { s = 4; }

                   	 
                   	input.Seek(index83_2);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae83 =
            new NoViableAltException(dfa.Description, 83, _s, input);
        dfa.Error(nvae83);
        throw nvae83;
    }
    const string DFA80_eotS =
        "\xA\xFFFF";
    const string DFA80_eofS =
        "\x1\x1\x9\xFFFF";
    const string DFA80_minS =
        "\x1\xD\x4\xFFFF\x1\x0\x4\xFFFF";
    const string DFA80_maxS =
        "\x1\x4D\x4\xFFFF\x1\x0\x4\xFFFF";
    const string DFA80_acceptS =
        "\x1\xFFFF\x1\x2\x7\xFFFF\x1\x1";
    const string DFA80_specialS =
        "\x5\xFFFF\x1\x0\x4\xFFFF}>";
    static readonly string[] DFA80_transitionS = {
            "\x1\x1\x1A\xFFFF\x1\x5\x2\x1\x1\xFFFF\x1\x1\x6\xFFFF\x1\x1\x14"+
            "\xFFFF\x1\x9\x4\xFFFF\x1\x1",
            "",
            "",
            "",
            "",
            "\x1\xFFFF",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA80_eot = DFA.UnpackEncodedString(DFA80_eotS);
    static readonly short[] DFA80_eof = DFA.UnpackEncodedString(DFA80_eofS);
    static readonly char[] DFA80_min = DFA.UnpackEncodedStringToUnsignedChars(DFA80_minS);
    static readonly char[] DFA80_max = DFA.UnpackEncodedStringToUnsignedChars(DFA80_maxS);
    static readonly short[] DFA80_accept = DFA.UnpackEncodedString(DFA80_acceptS);
    static readonly short[] DFA80_special = DFA.UnpackEncodedString(DFA80_specialS);
    static readonly short[][] DFA80_transition = DFA.UnpackEncodedStringArray(DFA80_transitionS);

    protected class DFA80 : DFA
    {
        public DFA80(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 80;
            this.eot = DFA80_eot;
            this.eof = DFA80_eof;
            this.min = DFA80_min;
            this.max = DFA80_max;
            this.accept = DFA80_accept;
            this.special = DFA80_special;
            this.transition = DFA80_transition;

        }

        override public string Description
        {
            get { return "()+ loopback of 348:33: ( abstract_declarator_suffix )+"; }
        }

    }


    protected internal int DFA80_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA80_5 = input.LA(1);

                   	 
                   	int index80_5 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred158_ObjectiveC2ansi()) ) { s = 9; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index80_5);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae80 =
            new NoViableAltException(dfa.Description, 80, _s, input);
        dfa.Error(nvae80);
        throw nvae80;
    }
    const string DFA91_eotS =
        "\x2C\xFFFF";
    const string DFA91_eofS =
        "\x2C\xFFFF";
    const string DFA91_minS =
        "\x1\x4\x1\x0\x2A\xFFFF";
    const string DFA91_maxS =
        "\x1\x91\x1\x0\x2A\xFFFF";
    const string DFA91_acceptS =
        "\x2\xFFFF\x1\x2\x19\xFFFF\x1\x1\xF\xFFFF";
    const string DFA91_specialS =
        "\x1\xFFFF\x1\x0\x2A\xFFFF}>";
    static readonly string[] DFA91_transitionS = {
            "\x1\x2\x1\xFFFF\x1\x2\x2\xFFFF\x1\x2\x1\xFFFF\x1\x2\x1\xFFFF"+
            "\x1\x1\x3\xFFFF\x1\x2\x1\xFFFF\x1\x2\x2\xFFFF\x3\x2\xC\xFFFF"+
            "\x1\x2\x2\xFFFF\x1\x2\x1\xFFFF\x1\x2\x8\xFFFF\x1\x2\x4\xFFFF"+
            "\x1\x2\x8\xFFFF\x1\x2\x1\xFFFF\x1\x2\x4\xFFFF\x1\x2\x4\xFFFF"+
            "\x1\x2\x3\xFFFF\x2\x2\x1\xFFFF\x1\x2\xF\xFFFF\x1\x1C\x1\x2\x2"+
            "\x1C\x1\x2\x2\x1C\x1\x2\x1\xFFFF\x2\x2\x1\x1C\x1\xFFFF\x3\x1C"+
            "\x2\x2\x1\x1C\x1\x2\x4\x1C\x1\xFFFF\x2\x1C\x2\xFFFF\x1\x1C\x1"+
            "\xFFFF\x2\x2\x2\x1C\x1\x2\x2\x1C\x1\xFFFF\x1\x2\x5\x1C\x1\x2",
            "\x1\xFFFF",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA91_eot = DFA.UnpackEncodedString(DFA91_eotS);
    static readonly short[] DFA91_eof = DFA.UnpackEncodedString(DFA91_eofS);
    static readonly char[] DFA91_min = DFA.UnpackEncodedStringToUnsignedChars(DFA91_minS);
    static readonly char[] DFA91_max = DFA.UnpackEncodedStringToUnsignedChars(DFA91_maxS);
    static readonly short[] DFA91_accept = DFA.UnpackEncodedString(DFA91_acceptS);
    static readonly short[] DFA91_special = DFA.UnpackEncodedString(DFA91_specialS);
    static readonly short[][] DFA91_transition = DFA.UnpackEncodedStringArray(DFA91_transitionS);

    protected class DFA91 : DFA
    {
        public DFA91(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 91;
            this.eot = DFA91_eot;
            this.eof = DFA91_eof;
            this.min = DFA91_min;
            this.max = DFA91_max;
            this.accept = DFA91_accept;
            this.special = DFA91_special;
            this.transition = DFA91_transition;

        }

        override public string Description
        {
            get { return "()* loopback of 375:26: ( declaration )*"; }
        }

    }


    protected internal int DFA91_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA91_1 = input.LA(1);

                   	 
                   	int index91_1 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred176_ObjectiveC2ansi()) ) { s = 28; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index91_1);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae91 =
            new NoViableAltException(dfa.Description, 91, _s, input);
        dfa.Error(nvae91);
        throw nvae91;
    }
    const string DFA114_eotS =
        "\xF\xFFFF";
    const string DFA114_eofS =
        "\xF\xFFFF";
    const string DFA114_minS =
        "\x1\x4\x1\x0\xD\xFFFF";
    const string DFA114_maxS =
        "\x1\x87\x1\x0\xD\xFFFF";
    const string DFA114_acceptS =
        "\x2\xFFFF\x1\x2\xB\xFFFF\x1\x1";
    const string DFA114_specialS =
        "\x1\xFFFF\x1\x0\xD\xFFFF}>";
    static readonly string[] DFA114_transitionS = {
            "\x1\x2\x1\xFFFF\x1\x2\x2\xFFFF\x1\x2\x1\xFFFF\x1\x2\x1\xFFFF"+
            "\x1\x2\x3\xFFFF\x1\x2\x1\xFFFF\x1\x2\x2\xFFFF\x3\x2\xC\xFFFF"+
            "\x1\x2\x2\xFFFF\x1\x1\x1\xFFFF\x1\x2\xD\xFFFF\x1\x2\x8\xFFFF"+
            "\x1\x2\x1\xFFFF\x1\x2\x4\xFFFF\x1\x2\x9\xFFFF\x1\x2\x1\xFFFF"+
            "\x1\x2\x2F\xFFFF\x1\x2\x2\xFFFF\x1\x2",
            "\x1\xFFFF",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA114_eot = DFA.UnpackEncodedString(DFA114_eotS);
    static readonly short[] DFA114_eof = DFA.UnpackEncodedString(DFA114_eofS);
    static readonly char[] DFA114_min = DFA.UnpackEncodedStringToUnsignedChars(DFA114_minS);
    static readonly char[] DFA114_max = DFA.UnpackEncodedStringToUnsignedChars(DFA114_maxS);
    static readonly short[] DFA114_accept = DFA.UnpackEncodedString(DFA114_acceptS);
    static readonly short[] DFA114_special = DFA.UnpackEncodedString(DFA114_specialS);
    static readonly short[][] DFA114_transition = DFA.UnpackEncodedStringArray(DFA114_transitionS);

    protected class DFA114 : DFA
    {
        public DFA114(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 114;
            this.eot = DFA114_eot;
            this.eof = DFA114_eof;
            this.min = DFA114_min;
            this.max = DFA114_max;
            this.accept = DFA114_accept;
            this.special = DFA114_special;
            this.transition = DFA114_transition;

        }

        override public string Description
        {
            get { return "432:0: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );"; }
        }

    }


    protected internal int DFA114_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA114_1 = input.LA(1);

                   	 
                   	int index114_1 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred220_ObjectiveC2ansi()) ) { s = 14; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index114_1);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae114 =
            new NoViableAltException(dfa.Description, 114, _s, input);
        dfa.Error(nvae114);
        throw nvae114;
    }
    const string DFA115_eotS =
        "\xF\xFFFF";
    const string DFA115_eofS =
        "\xF\xFFFF";
    const string DFA115_minS =
        "\x1\x4\x1\x0\xD\xFFFF";
    const string DFA115_maxS =
        "\x1\x87\x1\x0\xD\xFFFF";
    const string DFA115_acceptS =
        "\x2\xFFFF\x1\x2\xB\xFFFF\x1\x1";
    const string DFA115_specialS =
        "\x1\xFFFF\x1\x0\xD\xFFFF}>";
    static readonly string[] DFA115_transitionS = {
            "\x1\x2\x1\xFFFF\x1\x2\x2\xFFFF\x1\x2\x1\xFFFF\x1\x2\x1\xFFFF"+
            "\x1\x2\x3\xFFFF\x1\x2\x1\xFFFF\x1\x2\x2\xFFFF\x3\x2\xC\xFFFF"+
            "\x1\x2\x2\xFFFF\x1\x1\x1\xFFFF\x1\x2\xD\xFFFF\x1\x2\x8\xFFFF"+
            "\x1\x2\x1\xFFFF\x1\x2\x4\xFFFF\x1\x2\x9\xFFFF\x1\x2\x1\xFFFF"+
            "\x1\x2\x2F\xFFFF\x1\x2\x2\xFFFF\x1\x2",
            "\x1\xFFFF",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA115_eot = DFA.UnpackEncodedString(DFA115_eotS);
    static readonly short[] DFA115_eof = DFA.UnpackEncodedString(DFA115_eofS);
    static readonly char[] DFA115_min = DFA.UnpackEncodedStringToUnsignedChars(DFA115_minS);
    static readonly char[] DFA115_max = DFA.UnpackEncodedStringToUnsignedChars(DFA115_maxS);
    static readonly short[] DFA115_accept = DFA.UnpackEncodedString(DFA115_acceptS);
    static readonly short[] DFA115_special = DFA.UnpackEncodedString(DFA115_specialS);
    static readonly short[][] DFA115_transition = DFA.UnpackEncodedStringArray(DFA115_transitionS);

    protected class DFA115 : DFA
    {
        public DFA115(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 115;
            this.eot = DFA115_eot;
            this.eof = DFA115_eof;
            this.min = DFA115_min;
            this.max = DFA115_max;
            this.accept = DFA115_accept;
            this.special = DFA115_special;
            this.transition = DFA115_transition;

        }

        override public string Description
        {
            get { return "439:14: ( '(' type_name ')' | unary_expression )"; }
        }

    }


    protected internal int DFA115_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA115_1 = input.LA(1);

                   	 
                   	int index115_1 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred225_ObjectiveC2ansi()) ) { s = 14; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index115_1);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae115 =
            new NoViableAltException(dfa.Description, 115, _s, input);
        dfa.Error(nvae115);
        throw nvae115;
    }
 

    public static readonly BitSet FOLLOW_external_declaration_in_translation_unit38 = new BitSet(new ulong[]{0x18400007F8012020UL,0x6F4E86D000000002UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_EOF_in_translation_unit41 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_COMMENT_in_external_declaration48 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_LINE_COMMENT_in_external_declaration52 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_preprocessor_declaration_in_external_declaration56 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_function_definition_in_external_declaration59 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_declaration_in_external_declaration63 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_class_interface_in_external_declaration68 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_class_implementation_in_external_declaration72 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_category_interface_in_external_declaration76 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_category_implementation_in_external_declaration80 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_protocol_declaration_in_external_declaration84 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_protocol_declaration_list_in_external_declaration88 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_class_declaration_list_in_external_declaration92 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_32_in_preprocessor_declaration99 = new BitSet(new ulong[]{0x0000000004000000UL,0x0000000000400000UL});
    public static readonly BitSet FOLLOW_file_specification_in_preprocessor_declaration101 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_33_in_preprocessor_declaration105 = new BitSet(new ulong[]{0x0000000004000000UL,0x0000000000400000UL});
    public static readonly BitSet FOLLOW_file_specification_in_preprocessor_declaration107 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_27_in_preprocessor_declaration111 = new BitSet(new ulong[]{0x0000800000000000UL});
    public static readonly BitSet FOLLOW_macro_specification_in_preprocessor_declaration113 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_30_in_preprocessor_declaration117 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_expression_in_preprocessor_declaration119 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_29_in_preprocessor_declaration123 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_expression_in_preprocessor_declaration125 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_34_in_preprocessor_declaration129 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_expression_in_preprocessor_declaration131 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_31_in_preprocessor_declaration135 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_expression_in_preprocessor_declaration137 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_28_in_preprocessor_declaration141 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_file_specification148 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_file_specification154 = new BitSet(new ulong[]{0x0001200004002000UL,0x0000000020000200UL});
    public static readonly BitSet FOLLOW_set_in_file_specification156 = new BitSet(new ulong[]{0x0000000004002000UL,0x0000000020000000UL});
    public static readonly BitSet FOLLOW_set_in_file_specification171 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_47_in_macro_specification184 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_60_in_class_interface192 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_class_name_in_class_interface198 = new BitSet(new ulong[]{0x8204000000402000UL,0x6F4E86D000482000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_50_in_class_interface201 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_superclass_name_in_class_interface203 = new BitSet(new ulong[]{0x8200000000402000UL,0x6F4E86D000482000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_protocol_reference_list_in_class_interface210 = new BitSet(new ulong[]{0x8200000000402000UL,0x6F4E86D000082000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_instance_variables_in_class_interface219 = new BitSet(new ulong[]{0x8200000000402000UL,0x6F4E86D000080000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_properties_list_in_class_interface227 = new BitSet(new ulong[]{0x0200000000402000UL,0x6F4E86D000080000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_interface_declaration_list_in_class_interface235 = new BitSet(new ulong[]{0x0200000000000000UL});
    public static readonly BitSet FOLLOW_57_in_class_interface244 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_60_in_category_interface252 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_class_name_in_category_interface258 = new BitSet(new ulong[]{0x0000010000000000UL});
    public static readonly BitSet FOLLOW_40_in_category_interface260 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_category_name_in_category_interface262 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_category_interface264 = new BitSet(new ulong[]{0x0200000000402000UL,0x6F4E86D000480000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_protocol_reference_list_in_category_interface269 = new BitSet(new ulong[]{0x0200000000402000UL,0x6F4E86D000080000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_interface_declaration_list_in_category_interface277 = new BitSet(new ulong[]{0x0200000000000000UL});
    public static readonly BitSet FOLLOW_57_in_category_interface286 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_59_in_class_implementation294 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_class_name_in_class_implementation300 = new BitSet(new ulong[]{0x0284000000402000UL,0x6F4E86D000080020UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_50_in_class_implementation304 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_superclass_name_in_class_implementation306 = new BitSet(new ulong[]{0x0280000000402000UL,0x6F4E86D000080020UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_implementation_definition_list_in_class_implementation314 = new BitSet(new ulong[]{0x0200000000000000UL});
    public static readonly BitSet FOLLOW_57_in_class_implementation323 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_59_in_category_implementation331 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_class_name_in_category_implementation335 = new BitSet(new ulong[]{0x0000010000000000UL});
    public static readonly BitSet FOLLOW_40_in_category_implementation337 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_category_name_in_category_implementation339 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_category_implementation341 = new BitSet(new ulong[]{0x0280000000402000UL,0x6F4E86D000080020UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_implementation_definition_list_in_category_implementation346 = new BitSet(new ulong[]{0x0200000000000000UL});
    public static readonly BitSet FOLLOW_57_in_category_implementation353 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_65_in_protocol_declaration361 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_protocol_name_in_protocol_declaration365 = new BitSet(new ulong[]{0x0200000000402000UL,0x6F4E86D000480000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_protocol_reference_list_in_protocol_declaration369 = new BitSet(new ulong[]{0x0200000000402000UL,0x6F4E86D000080000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_interface_declaration_list_in_protocol_declaration377 = new BitSet(new ulong[]{0x0200000000000000UL});
    public static readonly BitSet FOLLOW_57_in_protocol_declaration384 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_65_in_protocol_declaration_list393 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_protocol_list_in_protocol_declaration_list395 = new BitSet(new ulong[]{0x0008000000000000UL});
    public static readonly BitSet FOLLOW_51_in_protocol_declaration_list396 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_54_in_class_declaration_list408 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_class_list_in_class_declaration_list410 = new BitSet(new ulong[]{0x0008000000000000UL});
    public static readonly BitSet FOLLOW_51_in_class_declaration_list411 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_class_name_in_class_list422 = new BitSet(new ulong[]{0x0000100000000002UL});
    public static readonly BitSet FOLLOW_44_in_class_list425 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_class_name_in_class_list427 = new BitSet(new ulong[]{0x0000100000000002UL});
    public static readonly BitSet FOLLOW_86_in_protocol_reference_list438 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_protocol_list_in_protocol_reference_list440 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000020000000UL});
    public static readonly BitSet FOLLOW_93_in_protocol_reference_list442 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_protocol_name_in_protocol_list451 = new BitSet(new ulong[]{0x0000100000000002UL});
    public static readonly BitSet FOLLOW_44_in_protocol_list454 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_protocol_name_in_protocol_list456 = new BitSet(new ulong[]{0x0000100000000002UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_class_name466 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_superclass_name474 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_category_name482 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_protocol_name490 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_77_in_instance_variables498 = new BitSet(new ulong[]{0x6000000000002000UL,0x6F4E86D000020005UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_visibility_specification_in_instance_variables502 = new BitSet(new ulong[]{0x6000000000002000UL,0x6F4E86D000000005UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_struct_declaration_list_in_instance_variables506 = new BitSet(new ulong[]{0x6000000000002000UL,0x6F4E86D000020005UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_81_in_instance_variables510 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_property_in_properties_list519 = new BitSet(new ulong[]{0x8000000000000002UL});
    public static readonly BitSet FOLLOW_properties_list_in_properties_list521 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_struct_declaration_in_struct_declaration_list540 = new BitSet(new ulong[]{0x6000000000002002UL,0x6F4E86D000000005UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_struct_declaration_in_struct_declaration_list544 = new BitSet(new ulong[]{0x6000000000002002UL,0x6F4E86D000000005UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_set_in_visibility_specification564 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_declaration_in_interface_declaration_list589 = new BitSet(new ulong[]{0x0000000000402002UL,0x6F4E86D000080000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_class_method_declaration_in_interface_declaration_list593 = new BitSet(new ulong[]{0x0000000000402002UL,0x6F4E86D000080000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_instance_method_declaration_in_interface_declaration_list597 = new BitSet(new ulong[]{0x0000000000402002UL,0x6F4E86D000080000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_83_in_class_method_declaration610 = new BitSet(new ulong[]{0x0004010000002000UL});
    public static readonly BitSet FOLLOW_method_declaration_in_class_method_declaration612 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_22_in_instance_method_declaration624 = new BitSet(new ulong[]{0x0004010000002000UL});
    public static readonly BitSet FOLLOW_method_declaration_in_instance_method_declaration626 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_method_type_in_method_declaration639 = new BitSet(new ulong[]{0x0004010000002000UL});
    public static readonly BitSet FOLLOW_method_selector_in_method_declaration644 = new BitSet(new ulong[]{0x0008000000000000UL});
    public static readonly BitSet FOLLOW_51_in_method_declaration646 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_69_in_synthesize_statement655 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_synthesize_statement657 = new BitSet(new ulong[]{0x0008100000000000UL});
    public static readonly BitSet FOLLOW_44_in_synthesize_statement660 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_synthesize_statement662 = new BitSet(new ulong[]{0x0008100000000000UL});
    public static readonly BitSet FOLLOW_51_in_synthesize_statement666 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_55_in_dynamic_statement675 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_dynamic_statement677 = new BitSet(new ulong[]{0x0008100000000000UL});
    public static readonly BitSet FOLLOW_44_in_dynamic_statement680 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_dynamic_statement682 = new BitSet(new ulong[]{0x0008100000000000UL});
    public static readonly BitSet FOLLOW_51_in_dynamic_statement686 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_synthesize_statement_in_implementation_definition_list695 = new BitSet(new ulong[]{0x0080000000402002UL,0x6F4E86D000080020UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_dynamic_statement_in_implementation_definition_list699 = new BitSet(new ulong[]{0x0080000000402002UL,0x6F4E86D000080020UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_function_definition_in_implementation_definition_list703 = new BitSet(new ulong[]{0x0080000000402002UL,0x6F4E86D000080020UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_declaration_in_implementation_definition_list707 = new BitSet(new ulong[]{0x0080000000402002UL,0x6F4E86D000080020UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_class_method_definition_in_implementation_definition_list711 = new BitSet(new ulong[]{0x0080000000402002UL,0x6F4E86D000080020UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_instance_method_definition_in_implementation_definition_list715 = new BitSet(new ulong[]{0x0080000000402002UL,0x6F4E86D000080020UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_83_in_class_method_definition726 = new BitSet(new ulong[]{0x0004010000002000UL});
    public static readonly BitSet FOLLOW_method_definition_in_class_method_definition728 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_22_in_instance_method_definition740 = new BitSet(new ulong[]{0x0004010000002000UL});
    public static readonly BitSet FOLLOW_method_definition_in_instance_method_definition742 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_method_type_in_method_definition755 = new BitSet(new ulong[]{0x0004010000002000UL});
    public static readonly BitSet FOLLOW_method_selector_in_method_definition759 = new BitSet(new ulong[]{0x0000050000002000UL,0x0000000000002000UL});
    public static readonly BitSet FOLLOW_init_declarator_list_in_method_definition762 = new BitSet(new ulong[]{0x0000050000002000UL,0x0000000000002000UL});
    public static readonly BitSet FOLLOW_compound_statement_in_method_definition766 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_selector_in_method_selector774 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_keyword_declarator_in_method_selector778 = new BitSet(new ulong[]{0x0004010000002002UL,0x6F4E86D000000000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_parameter_list_in_method_selector782 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_selector_in_keyword_declarator796 = new BitSet(new ulong[]{0x0004000000000000UL});
    public static readonly BitSet FOLLOW_50_in_keyword_declarator799 = new BitSet(new ulong[]{0x0000010000002000UL});
    public static readonly BitSet FOLLOW_method_type_in_keyword_declarator801 = new BitSet(new ulong[]{0x0000010000002000UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_keyword_declarator804 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_selector811 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_40_in_method_type818 = new BitSet(new ulong[]{0x6000000000002000UL,0x6F4E86D000000005UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_type_name_in_method_type820 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_method_type822 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_143_in_type_specifier829 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_105_in_type_specifier833 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_133_in_type_specifier837 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_122_in_type_specifier841 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_123_in_type_specifier845 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_115_in_type_specifier849 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_111_in_type_specifier853 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_134_in_type_specifier857 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_142_in_type_specifier861 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_118_in_type_specifier868 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000400000UL});
    public static readonly BitSet FOLLOW_protocol_reference_list_in_type_specifier872 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_class_name_in_type_specifier883 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000400000UL});
    public static readonly BitSet FOLLOW_protocol_reference_list_in_type_specifier887 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_struct_or_union_specifier_in_type_specifier896 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_enum_specifier_in_type_specifier901 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_type_specifier907 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_106_in_type_qualifier915 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_144_in_type_qualifier919 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_protocol_qualifier_in_type_qualifier923 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_protocol_qualifier931 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_primary_expression959 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_constant_in_primary_expression964 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_STRING_LITERAL_in_primary_expression969 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_40_in_primary_expression975 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_expression_in_primary_expression977 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_primary_expression979 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_132_in_primary_expression985 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_message_expression_in_primary_expression990 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_selector_expression_in_primary_expression995 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_protocol_expression_in_primary_expression1000 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_encode_expression_in_primary_expression1005 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_72_in_message_expression1014 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000490UL});
    public static readonly BitSet FOLLOW_receiver_in_message_expression1016 = new BitSet(new ulong[]{0x0004000000002000UL});
    public static readonly BitSet FOLLOW_message_selector_in_message_expression1018 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000400UL});
    public static readonly BitSet FOLLOW_74_in_message_expression1020 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_expression_in_receiver1031 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_class_name_in_receiver1036 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_138_in_receiver1042 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_selector_in_message_selector1050 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_keyword_argument_in_message_selector1055 = new BitSet(new ulong[]{0x0004000000002002UL});
    public static readonly BitSet FOLLOW_selector_in_keyword_argument1064 = new BitSet(new ulong[]{0x0004000000000000UL});
    public static readonly BitSet FOLLOW_50_in_keyword_argument1067 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_expression_in_keyword_argument1069 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_67_in_selector_expression1077 = new BitSet(new ulong[]{0x0000010000000000UL});
    public static readonly BitSet FOLLOW_40_in_selector_expression1079 = new BitSet(new ulong[]{0x0004000000002000UL});
    public static readonly BitSet FOLLOW_selector_name_in_selector_expression1081 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_selector_expression1083 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_selector_in_selector_name1091 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_selector_in_selector_name1097 = new BitSet(new ulong[]{0x0004000000000000UL});
    public static readonly BitSet FOLLOW_50_in_selector_name1100 = new BitSet(new ulong[]{0x0004000000002002UL});
    public static readonly BitSet FOLLOW_65_in_protocol_expression1110 = new BitSet(new ulong[]{0x0000010000000000UL});
    public static readonly BitSet FOLLOW_40_in_protocol_expression1112 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_protocol_name_in_protocol_expression1114 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_protocol_expression1116 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_56_in_encode_expression1124 = new BitSet(new ulong[]{0x0000010000000000UL});
    public static readonly BitSet FOLLOW_40_in_encode_expression1126 = new BitSet(new ulong[]{0x6000000000002000UL,0x6F4E86D000000005UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_type_name_in_encode_expression1128 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_encode_expression1130 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_declarator_in_exception_declarator1138 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_71_in_try_statement1146 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_53_in_catch_statement1154 = new BitSet(new ulong[]{0x0000010000000000UL});
    public static readonly BitSet FOLLOW_40_in_catch_statement1156 = new BitSet(new ulong[]{0x0000050000002000UL});
    public static readonly BitSet FOLLOW_exception_declarator_in_catch_statement1157 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_catch_statement1158 = new BitSet(new ulong[]{0x0108052001CA2A50UL,0x00B069200014210AUL,0x0000000000020898UL});
    public static readonly BitSet FOLLOW_statement_in_catch_statement1159 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_58_in_finally_statement1167 = new BitSet(new ulong[]{0x0108052001CA2A50UL,0x00B069200014210AUL,0x0000000000020898UL});
    public static readonly BitSet FOLLOW_statement_in_finally_statement1169 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_70_in_throw_statement1177 = new BitSet(new ulong[]{0x0000010000000000UL});
    public static readonly BitSet FOLLOW_40_in_throw_statement1179 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_throw_statement1180 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_throw_statement1181 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_try_statement_in_try_block1189 = new BitSet(new ulong[]{0x0020000000000000UL});
    public static readonly BitSet FOLLOW_catch_statement_in_try_block1192 = new BitSet(new ulong[]{0x0400000000000002UL});
    public static readonly BitSet FOLLOW_finally_statement_in_try_block1197 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_68_in_synchronized_statement1208 = new BitSet(new ulong[]{0x0000010000000000UL});
    public static readonly BitSet FOLLOW_40_in_synchronized_statement1210 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_synchronized_statement1212 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_synchronized_statement1214 = new BitSet(new ulong[]{0x0108052001CA2A50UL,0x00B069200014210AUL,0x0000000000020898UL});
    public static readonly BitSet FOLLOW_statement_in_synchronized_statement1216 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_63_in_property1226 = new BitSet(new ulong[]{0x0000010000000000UL});
    public static readonly BitSet FOLLOW_40_in_property1228 = new BitSet(new ulong[]{0x0000020000000000UL,0x9000100C00000000UL,0x0000000000000005UL});
    public static readonly BitSet FOLLOW_atomicity_in_property1231 = new BitSet(new ulong[]{0x0000020000000000UL,0x9000100C00000000UL,0x0000000000000005UL});
    public static readonly BitSet FOLLOW_memory_managmenet_in_property1233 = new BitSet(new ulong[]{0x0000020000000000UL,0x9000100C00000000UL,0x0000000000000005UL});
    public static readonly BitSet FOLLOW_access_in_property1235 = new BitSet(new ulong[]{0x0000020000000000UL,0x9000100C00000000UL,0x0000000000000005UL});
    public static readonly BitSet FOLLOW_41_in_property1239 = new BitSet(new ulong[]{0x6000000000002000UL,0x6F4E86D000000005UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_struct_declaration_in_property1241 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_atomicity1250 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_memory_managmenet1261 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_access1273 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_declaration_specifiers_in_function_definition1283 = new BitSet(new ulong[]{0x0000050000002000UL});
    public static readonly BitSet FOLLOW_declarator_in_function_definition1285 = new BitSet(new ulong[]{0x0000050000002000UL,0x0000000000002000UL});
    public static readonly BitSet FOLLOW_compound_statement_in_function_definition1287 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_declaration_specifiers_in_declaration1296 = new BitSet(new ulong[]{0x0008050000002000UL});
    public static readonly BitSet FOLLOW_init_declarator_list_in_declaration1298 = new BitSet(new ulong[]{0x0008000000000000UL});
    public static readonly BitSet FOLLOW_51_in_declaration1301 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_storage_class_specifier_in_declaration_specifiers1313 = new BitSet(new ulong[]{0x0000000000002002UL,0x6F4E86D000000000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_type_specifier_in_declaration_specifiers1317 = new BitSet(new ulong[]{0x0000000000002002UL,0x6F4E86D000000000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_type_qualifier_in_declaration_specifiers1321 = new BitSet(new ulong[]{0x0000000000002002UL,0x6F4E86D000000000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_set_in_storage_class_specifier1331 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_init_declarator_in_init_declarator_list1355 = new BitSet(new ulong[]{0x0000100000000002UL});
    public static readonly BitSet FOLLOW_44_in_init_declarator_list1358 = new BitSet(new ulong[]{0x0000050000002000UL});
    public static readonly BitSet FOLLOW_init_declarator_in_init_declarator_list1360 = new BitSet(new ulong[]{0x0000100000000002UL});
    public static readonly BitSet FOLLOW_declarator_in_init_declarator1370 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000004000000UL});
    public static readonly BitSet FOLLOW_90_in_init_declarator1373 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014210AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_initializer_in_init_declarator1375 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_struct_or_union_specifier1385 = new BitSet(new ulong[]{0x0000000000002000UL,0x0000000000002000UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_struct_or_union_specifier1398 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_struct_or_union_specifier1402 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000002000UL});
    public static readonly BitSet FOLLOW_77_in_struct_or_union_specifier1405 = new BitSet(new ulong[]{0x6000000000002000UL,0x6F4E86D000000005UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_struct_declaration_in_struct_or_union_specifier1407 = new BitSet(new ulong[]{0x6000000000002000UL,0x6F4E86D000020005UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_81_in_struct_or_union_specifier1410 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_struct_declarator_in_struct_declarator_list1420 = new BitSet(new ulong[]{0x0000100000000002UL});
    public static readonly BitSet FOLLOW_44_in_struct_declarator_list1424 = new BitSet(new ulong[]{0x0004050000002000UL});
    public static readonly BitSet FOLLOW_struct_declarator_in_struct_declarator_list1426 = new BitSet(new ulong[]{0x0000100000000002UL});
    public static readonly BitSet FOLLOW_specifier_qualifier_list_in_struct_declaration1436 = new BitSet(new ulong[]{0x0004050000002000UL});
    public static readonly BitSet FOLLOW_struct_declarator_list_in_struct_declaration1438 = new BitSet(new ulong[]{0x0008000000000000UL});
    public static readonly BitSet FOLLOW_51_in_struct_declaration1440 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_type_specifier_in_specifier_qualifier_list1459 = new BitSet(new ulong[]{0x6000000000002002UL,0x6F4E86D000000005UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_type_qualifier_in_specifier_qualifier_list1463 = new BitSet(new ulong[]{0x6000000000002002UL,0x6F4E86D000000005UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_specifier_qualifier_list_in_specifier_qualifier_list1466 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_declarator_in_struct_declarator1486 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_50_in_struct_declarator1498 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_constant_expression_in_struct_declarator1500 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_declarator_in_struct_declarator1512 = new BitSet(new ulong[]{0x0004000000000000UL});
    public static readonly BitSet FOLLOW_50_in_struct_declarator1514 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_constant_expression_in_struct_declarator1516 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_113_in_enum_specifier1533 = new BitSet(new ulong[]{0x0000000000002000UL,0x0000000000002000UL});
    public static readonly BitSet FOLLOW_identifier_in_enum_specifier1540 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000002000UL});
    public static readonly BitSet FOLLOW_77_in_enum_specifier1543 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_enumerator_list_in_enum_specifier1545 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_81_in_enum_specifier1547 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_77_in_enum_specifier1556 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_enumerator_list_in_enum_specifier1558 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_81_in_enum_specifier1560 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_enumerator_in_enumerator_list1569 = new BitSet(new ulong[]{0x0000100000000002UL});
    public static readonly BitSet FOLLOW_44_in_enumerator_list1572 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_enumerator_in_enumerator_list1574 = new BitSet(new ulong[]{0x0000100000000002UL});
    public static readonly BitSet FOLLOW_identifier_in_enumerator1584 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000004000000UL});
    public static readonly BitSet FOLLOW_90_in_enumerator1587 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_constant_expression_in_enumerator1589 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_pointer_in_declarator1607 = new BitSet(new ulong[]{0x0000050000002000UL});
    public static readonly BitSet FOLLOW_direct_declarator_in_declarator1609 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_direct_declarator_in_declarator1621 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_42_in_pointer1638 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_42_in_pointer1650 = new BitSet(new ulong[]{0x0000000000002000UL,0x6F4E86D000000000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_type_qualifier_list_in_pointer1652 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_42_in_pointer1664 = new BitSet(new ulong[]{0x0000040000000000UL});
    public static readonly BitSet FOLLOW_pointer_in_pointer1666 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_42_in_pointer1678 = new BitSet(new ulong[]{0x0000000000002000UL,0x6F4E86D000000000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_type_qualifier_list_in_pointer1680 = new BitSet(new ulong[]{0x0000040000000000UL});
    public static readonly BitSet FOLLOW_pointer_in_pointer1682 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_type_qualifier_in_type_qualifier_list1699 = new BitSet(new ulong[]{0x0000000000002002UL,0x6F4E86D000000000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_direct_declarator1711 = new BitSet(new ulong[]{0x0000010000000002UL,0x0000000000000100UL});
    public static readonly BitSet FOLLOW_40_in_direct_declarator1715 = new BitSet(new ulong[]{0x0000050000002000UL});
    public static readonly BitSet FOLLOW_declarator_in_direct_declarator1717 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_direct_declarator1719 = new BitSet(new ulong[]{0x0000010000000002UL,0x0000000000000100UL});
    public static readonly BitSet FOLLOW_72_in_direct_declarator1725 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_constant_expression_in_direct_declarator1727 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000400UL});
    public static readonly BitSet FOLLOW_74_in_direct_declarator1729 = new BitSet(new ulong[]{0x0000010000000002UL,0x0000000000000100UL});
    public static readonly BitSet FOLLOW_72_in_direct_declarator1733 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000400UL});
    public static readonly BitSet FOLLOW_74_in_direct_declarator1735 = new BitSet(new ulong[]{0x0000010000000002UL,0x0000000000000100UL});
    public static readonly BitSet FOLLOW_40_in_direct_declarator1739 = new BitSet(new ulong[]{0x0000000000002000UL,0x6F4E86D000000000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_parameter_type_list_in_direct_declarator1741 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_direct_declarator1743 = new BitSet(new ulong[]{0x0000010000000002UL,0x0000000000000100UL});
    public static readonly BitSet FOLLOW_40_in_direct_declarator1747 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_identifier_list_in_direct_declarator1749 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_direct_declarator1751 = new BitSet(new ulong[]{0x0000010000000002UL,0x0000000000000100UL});
    public static readonly BitSet FOLLOW_40_in_direct_declarator1755 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_direct_declarator1757 = new BitSet(new ulong[]{0x0000010000000002UL,0x0000000000000100UL});
    public static readonly BitSet FOLLOW_parameter_declaration_in_parameter_list1785 = new BitSet(new ulong[]{0x0000100000000002UL});
    public static readonly BitSet FOLLOW_44_in_parameter_list1789 = new BitSet(new ulong[]{0x0000000000002000UL,0x6F4E86D000000000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_parameter_declaration_in_parameter_list1791 = new BitSet(new ulong[]{0x0000100000000002UL});
    public static readonly BitSet FOLLOW_parameter_list_in_parameter_type_list1815 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_parameter_list_in_parameter_type_list1827 = new BitSet(new ulong[]{0x0000100000000000UL});
    public static readonly BitSet FOLLOW_44_in_parameter_type_list1830 = new BitSet(new ulong[]{0x0000400000000000UL});
    public static readonly BitSet FOLLOW_46_in_parameter_type_list1832 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_identifier_list1867 = new BitSet(new ulong[]{0x0000100000000002UL});
    public static readonly BitSet FOLLOW_44_in_identifier_list1871 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_identifier_list1873 = new BitSet(new ulong[]{0x0000100000000002UL});
    public static readonly BitSet FOLLOW_72_in_declarator_suffix1892 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014050AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_constant_expression_in_declarator_suffix1894 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000400UL});
    public static readonly BitSet FOLLOW_74_in_declarator_suffix1897 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_40_in_declarator_suffix1905 = new BitSet(new ulong[]{0x0000020000002000UL,0x6F4E86D000000000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_parameter_list_in_declarator_suffix1907 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_declarator_suffix1910 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_declaration_specifiers_in_parameter_declaration1922 = new BitSet(new ulong[]{0x0000050000002000UL,0x0000000000000100UL});
    public static readonly BitSet FOLLOW_declarator_in_parameter_declaration1925 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_abstract_declarator_in_parameter_declaration1929 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_assignment_expression_in_initializer1940 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_77_in_initializer1949 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014210AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_initializer_in_initializer1951 = new BitSet(new ulong[]{0x0000100000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_44_in_initializer1954 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014210AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_initializer_in_initializer1956 = new BitSet(new ulong[]{0x0000100000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_81_in_initializer1960 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_specifier_qualifier_list_in_type_name1969 = new BitSet(new ulong[]{0x0000050000000000UL,0x0000000000000100UL});
    public static readonly BitSet FOLLOW_abstract_declarator_in_type_name1971 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_42_in_abstract_declarator1980 = new BitSet(new ulong[]{0x0000050000002000UL,0x6F4E86D000000100UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_type_qualifier_in_abstract_declarator1982 = new BitSet(new ulong[]{0x0000050000002000UL,0x6F4E86D000000100UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_abstract_declarator_in_abstract_declarator1985 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_40_in_abstract_declarator1992 = new BitSet(new ulong[]{0x0000070000000000UL,0x0000000000000100UL});
    public static readonly BitSet FOLLOW_abstract_declarator_in_abstract_declarator1994 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_abstract_declarator1996 = new BitSet(new ulong[]{0x0000010000000000UL,0x0000000000000100UL});
    public static readonly BitSet FOLLOW_abstract_declarator_suffix_in_abstract_declarator1998 = new BitSet(new ulong[]{0x0000010000000002UL,0x0000000000000100UL});
    public static readonly BitSet FOLLOW_72_in_abstract_declarator2006 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014050AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_constant_expression_in_abstract_declarator2008 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000400UL});
    public static readonly BitSet FOLLOW_74_in_abstract_declarator2011 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000100UL});
    public static readonly BitSet FOLLOW_72_in_abstract_declarator_suffix2028 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014050AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_constant_expression_in_abstract_declarator_suffix2030 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000400UL});
    public static readonly BitSet FOLLOW_74_in_abstract_declarator_suffix2033 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_40_in_abstract_declarator_suffix2039 = new BitSet(new ulong[]{0x0000020000002000UL,0x6F4E86D000000000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_parameter_declaration_list_in_abstract_declarator_suffix2042 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_abstract_declarator_suffix2045 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_parameter_declaration_in_parameter_declaration_list2056 = new BitSet(new ulong[]{0x0000100000000002UL});
    public static readonly BitSet FOLLOW_44_in_parameter_declaration_list2060 = new BitSet(new ulong[]{0x0000000000002000UL,0x6F4E86D000000000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_parameter_declaration_in_parameter_declaration_list2062 = new BitSet(new ulong[]{0x0000100000000002UL});
    public static readonly BitSet FOLLOW_statement_in_statement_list2075 = new BitSet(new ulong[]{0x0108052001CA2A52UL,0x00B069200014210AUL,0x0000000000020898UL});
    public static readonly BitSet FOLLOW_labeled_statement_in_statement2089 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_expression_in_statement2095 = new BitSet(new ulong[]{0x0008000000000000UL});
    public static readonly BitSet FOLLOW_51_in_statement2097 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_compound_statement_in_statement2103 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_selection_statement_in_statement2109 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_iteration_statement_in_statement2115 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_jump_statement_in_statement2121 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_51_in_statement2127 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_identifier_in_labeled_statement2138 = new BitSet(new ulong[]{0x0004000000000000UL});
    public static readonly BitSet FOLLOW_50_in_labeled_statement2140 = new BitSet(new ulong[]{0x0108052001CA2A50UL,0x00B069200014210AUL,0x0000000000020898UL});
    public static readonly BitSet FOLLOW_statement_in_labeled_statement2142 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_104_in_labeled_statement2148 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_constant_expression_in_labeled_statement2150 = new BitSet(new ulong[]{0x0004000000000000UL});
    public static readonly BitSet FOLLOW_50_in_labeled_statement2152 = new BitSet(new ulong[]{0x0108052001CA2A50UL,0x00B069200014210AUL,0x0000000000020898UL});
    public static readonly BitSet FOLLOW_statement_in_labeled_statement2154 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_109_in_labeled_statement2160 = new BitSet(new ulong[]{0x0004000000000000UL});
    public static readonly BitSet FOLLOW_50_in_labeled_statement2162 = new BitSet(new ulong[]{0x0108052001CA2A50UL,0x00B069200014210AUL,0x0000000000020898UL});
    public static readonly BitSet FOLLOW_statement_in_labeled_statement2164 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_77_in_compound_statement2173 = new BitSet(new ulong[]{0x0108052001CA2A50UL,0x6FFEEFF00016210AUL,0x000000000003FBFAUL});
    public static readonly BitSet FOLLOW_declaration_in_compound_statement2176 = new BitSet(new ulong[]{0x0108052001CA2A50UL,0x6FFEEFF00016210AUL,0x000000000003FBFAUL});
    public static readonly BitSet FOLLOW_statement_list_in_compound_statement2180 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_81_in_compound_statement2183 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_119_in_selection_statement2194 = new BitSet(new ulong[]{0x0000010000000000UL});
    public static readonly BitSet FOLLOW_40_in_selection_statement2196 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_expression_in_selection_statement2198 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_selection_statement2200 = new BitSet(new ulong[]{0x0108052001CA2A50UL,0x00B069200014210AUL,0x0000000000020898UL});
    public static readonly BitSet FOLLOW_statement_in_selection_statement2202 = new BitSet(new ulong[]{0x0000000000000002UL,0x0001000000000000UL});
    public static readonly BitSet FOLLOW_112_in_selection_statement2205 = new BitSet(new ulong[]{0x0108052001CA2A50UL,0x00B069200014210AUL,0x0000000000020898UL});
    public static readonly BitSet FOLLOW_statement_in_selection_statement2207 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_139_in_selection_statement2215 = new BitSet(new ulong[]{0x0000010000000000UL});
    public static readonly BitSet FOLLOW_40_in_selection_statement2217 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_expression_in_selection_statement2219 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_selection_statement2221 = new BitSet(new ulong[]{0x0108052001CA2A50UL,0x00B069200014210AUL,0x0000000000020898UL});
    public static readonly BitSet FOLLOW_statement_in_selection_statement2223 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_145_in_iteration_statement2234 = new BitSet(new ulong[]{0x0000010000000000UL});
    public static readonly BitSet FOLLOW_40_in_iteration_statement2236 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_expression_in_iteration_statement2238 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_iteration_statement2240 = new BitSet(new ulong[]{0x0108052001CA2A50UL,0x00B069200014210AUL,0x0000000000020898UL});
    public static readonly BitSet FOLLOW_statement_in_iteration_statement2242 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_110_in_iteration_statement2248 = new BitSet(new ulong[]{0x0108052001CA2A50UL,0x00B069200014210AUL,0x0000000000020898UL});
    public static readonly BitSet FOLLOW_statement_in_iteration_statement2250 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_145_in_iteration_statement2252 = new BitSet(new ulong[]{0x0000010000000000UL});
    public static readonly BitSet FOLLOW_40_in_iteration_statement2254 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_expression_in_iteration_statement2256 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_iteration_statement2258 = new BitSet(new ulong[]{0x0008000000000000UL});
    public static readonly BitSet FOLLOW_51_in_iteration_statement2260 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_116_in_iteration_statement2266 = new BitSet(new ulong[]{0x0000010000000000UL});
    public static readonly BitSet FOLLOW_40_in_iteration_statement2268 = new BitSet(new ulong[]{0x0108052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_expression_in_iteration_statement2270 = new BitSet(new ulong[]{0x0008000000000000UL});
    public static readonly BitSet FOLLOW_51_in_iteration_statement2273 = new BitSet(new ulong[]{0x0108052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_expression_in_iteration_statement2275 = new BitSet(new ulong[]{0x0008000000000000UL});
    public static readonly BitSet FOLLOW_51_in_iteration_statement2278 = new BitSet(new ulong[]{0x0100072001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_expression_in_iteration_statement2280 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_iteration_statement2283 = new BitSet(new ulong[]{0x0108052001CA2A50UL,0x00B069200014210AUL,0x0000000000020898UL});
    public static readonly BitSet FOLLOW_statement_in_iteration_statement2285 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_117_in_jump_statement2296 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_identifier_in_jump_statement2298 = new BitSet(new ulong[]{0x0008000000000000UL});
    public static readonly BitSet FOLLOW_51_in_jump_statement2300 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_107_in_jump_statement2306 = new BitSet(new ulong[]{0x0008000000000000UL});
    public static readonly BitSet FOLLOW_51_in_jump_statement2308 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_101_in_jump_statement2314 = new BitSet(new ulong[]{0x0008000000000000UL});
    public static readonly BitSet FOLLOW_51_in_jump_statement2316 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_131_in_jump_statement2322 = new BitSet(new ulong[]{0x0108052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_expression_in_jump_statement2324 = new BitSet(new ulong[]{0x0008000000000000UL});
    public static readonly BitSet FOLLOW_51_in_jump_statement2327 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_assignment_expression_in_expression2339 = new BitSet(new ulong[]{0x0000100000000002UL});
    public static readonly BitSet FOLLOW_44_in_expression2342 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_assignment_expression_in_expression2344 = new BitSet(new ulong[]{0x0000100000000002UL});
    public static readonly BitSet FOLLOW_conditional_expression_in_assignment_expression2355 = new BitSet(new ulong[]{0x0002089000000002UL,0x000000020D211000UL});
    public static readonly BitSet FOLLOW_assignment_operator_in_assignment_expression2362 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_assignment_expression_in_assignment_expression2364 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_assignment_operator2376 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_logical_or_expression_in_conditional_expression2424 = new BitSet(new ulong[]{0x0010000000000002UL});
    public static readonly BitSet FOLLOW_52_in_conditional_expression2430 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_logical_or_expression_in_conditional_expression2432 = new BitSet(new ulong[]{0x0004000000000000UL});
    public static readonly BitSet FOLLOW_50_in_conditional_expression2434 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_logical_or_expression_in_conditional_expression2436 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_conditional_expression_in_constant_expression2447 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_logical_and_expression_in_logical_or_expression2456 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000008000UL});
    public static readonly BitSet FOLLOW_79_in_logical_or_expression2462 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_logical_and_expression_in_logical_or_expression2464 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000008000UL});
    public static readonly BitSet FOLLOW_inclusive_or_expression_in_logical_and_expression2475 = new BitSet(new ulong[]{0x0000004000000002UL});
    public static readonly BitSet FOLLOW_38_in_logical_and_expression2481 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_inclusive_or_expression_in_logical_and_expression2483 = new BitSet(new ulong[]{0x0000004000000002UL});
    public static readonly BitSet FOLLOW_exclusive_or_expression_in_inclusive_or_expression2494 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000004000UL});
    public static readonly BitSet FOLLOW_78_in_inclusive_or_expression2500 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_exclusive_or_expression_in_inclusive_or_expression2502 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000004000UL});
    public static readonly BitSet FOLLOW_and_expression_in_exclusive_or_expression2513 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000800UL});
    public static readonly BitSet FOLLOW_75_in_exclusive_or_expression2516 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_and_expression_in_exclusive_or_expression2518 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000800UL});
    public static readonly BitSet FOLLOW_equality_expression_in_and_expression2529 = new BitSet(new ulong[]{0x0000002000000002UL});
    public static readonly BitSet FOLLOW_37_in_and_expression2532 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_equality_expression_in_and_expression2534 = new BitSet(new ulong[]{0x0000002000000002UL});
    public static readonly BitSet FOLLOW_relational_expression_in_equality_expression2545 = new BitSet(new ulong[]{0x0000000002000002UL,0x0000000010000000UL});
    public static readonly BitSet FOLLOW_set_in_equality_expression2551 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_relational_expression_in_equality_expression2559 = new BitSet(new ulong[]{0x0000000002000002UL,0x0000000010000000UL});
    public static readonly BitSet FOLLOW_shift_expression_in_relational_expression2570 = new BitSet(new ulong[]{0x0000000000000002UL,0x00000000A2400000UL});
    public static readonly BitSet FOLLOW_set_in_relational_expression2574 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_shift_expression_in_relational_expression2590 = new BitSet(new ulong[]{0x0000000000000002UL,0x00000000A2400000UL});
    public static readonly BitSet FOLLOW_additive_expression_in_shift_expression2601 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000100800000UL});
    public static readonly BitSet FOLLOW_set_in_shift_expression2604 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_additive_expression_in_shift_expression2612 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000100800000UL});
    public static readonly BitSet FOLLOW_multiplicative_expression_in_additive_expression2623 = new BitSet(new ulong[]{0x0000000000400002UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_set_in_additive_expression2628 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_multiplicative_expression_in_additive_expression2636 = new BitSet(new ulong[]{0x0000000000400002UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_cast_expression_in_multiplicative_expression2647 = new BitSet(new ulong[]{0x0001040800000002UL});
    public static readonly BitSet FOLLOW_set_in_multiplicative_expression2653 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_cast_expression_in_multiplicative_expression2665 = new BitSet(new ulong[]{0x0001040800000002UL});
    public static readonly BitSet FOLLOW_40_in_cast_expression2676 = new BitSet(new ulong[]{0x6000000000002000UL,0x6F4E86D000000005UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_type_name_in_cast_expression2678 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_cast_expression2680 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_cast_expression_in_cast_expression2682 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_unary_expression_in_cast_expression2686 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_postfix_expression_in_unary_expression2698 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_84_in_unary_expression2704 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_unary_expression_in_unary_expression2706 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_23_in_unary_expression2712 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_unary_expression_in_unary_expression2714 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_unary_operator_in_unary_expression2720 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_cast_expression_in_unary_expression2722 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_135_in_unary_expression2728 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_40_in_unary_expression2731 = new BitSet(new ulong[]{0x6000000000002000UL,0x6F4E86D000000005UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_type_name_in_unary_expression2733 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_unary_expression2735 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_unary_expression_in_unary_expression2739 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_unary_operator2749 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_primary_expression_in_postfix_expression2774 = new BitSet(new ulong[]{0x0000210000800002UL,0x0000000040100100UL});
    public static readonly BitSet FOLLOW_72_in_postfix_expression2779 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_expression_in_postfix_expression2781 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000400UL});
    public static readonly BitSet FOLLOW_74_in_postfix_expression2783 = new BitSet(new ulong[]{0x0000210000800002UL,0x0000000040100100UL});
    public static readonly BitSet FOLLOW_40_in_postfix_expression2790 = new BitSet(new ulong[]{0x0100072001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_argument_expression_list_in_postfix_expression2792 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_postfix_expression2795 = new BitSet(new ulong[]{0x0000210000800002UL,0x0000000040100100UL});
    public static readonly BitSet FOLLOW_45_in_postfix_expression2801 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_identifier_in_postfix_expression2803 = new BitSet(new ulong[]{0x0000210000800002UL,0x0000000040100100UL});
    public static readonly BitSet FOLLOW_94_in_postfix_expression2809 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_identifier_in_postfix_expression2811 = new BitSet(new ulong[]{0x0000210000800002UL,0x0000000040100100UL});
    public static readonly BitSet FOLLOW_84_in_postfix_expression2817 = new BitSet(new ulong[]{0x0000210000800002UL,0x0000000040100100UL});
    public static readonly BitSet FOLLOW_23_in_postfix_expression2823 = new BitSet(new ulong[]{0x0000210000800002UL,0x0000000040100100UL});
    public static readonly BitSet FOLLOW_assignment_expression_in_argument_expression_list2839 = new BitSet(new ulong[]{0x0000100000000002UL});
    public static readonly BitSet FOLLOW_44_in_argument_expression_list2842 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_assignment_expression_in_argument_expression_list2844 = new BitSet(new ulong[]{0x0000100000000002UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_identifier2855 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_constant2863 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_category_implementation_in_synpred10_ObjectiveC2ansi80 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_protocol_declaration_in_synpred11_ObjectiveC2ansi84 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_type_specifier_in_synpred114_ObjectiveC2ansi1317 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_protocol_declaration_list_in_synpred12_ObjectiveC2ansi88 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_IDENTIFIER_in_synpred123_ObjectiveC2ansi1398 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_specifier_qualifier_list_in_synpred128_ObjectiveC2ansi1466 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_declarator_in_synpred129_ObjectiveC2ansi1486 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_77_in_synpred131_ObjectiveC2ansi1543 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_enumerator_list_in_synpred131_ObjectiveC2ansi1545 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_81_in_synpred131_ObjectiveC2ansi1547 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_72_in_synpred141_ObjectiveC2ansi1725 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_constant_expression_in_synpred141_ObjectiveC2ansi1727 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000400UL});
    public static readonly BitSet FOLLOW_74_in_synpred141_ObjectiveC2ansi1729 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_72_in_synpred142_ObjectiveC2ansi1733 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000400UL});
    public static readonly BitSet FOLLOW_74_in_synpred142_ObjectiveC2ansi1735 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_40_in_synpred143_ObjectiveC2ansi1739 = new BitSet(new ulong[]{0x0000000000002000UL,0x6F4E86D000000000UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_parameter_type_list_in_synpred143_ObjectiveC2ansi1741 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_synpred143_ObjectiveC2ansi1743 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_40_in_synpred144_ObjectiveC2ansi1747 = new BitSet(new ulong[]{0x0000000000002000UL});
    public static readonly BitSet FOLLOW_identifier_list_in_synpred144_ObjectiveC2ansi1749 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_synpred144_ObjectiveC2ansi1751 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_40_in_synpred145_ObjectiveC2ansi1755 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_synpred145_ObjectiveC2ansi1757 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_parameter_list_in_synpred147_ObjectiveC2ansi1815 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_declarator_in_synpred152_ObjectiveC2ansi1925 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_abstract_declarator_in_synpred153_ObjectiveC2ansi1929 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_42_in_synpred157_ObjectiveC2ansi1980 = new BitSet(new ulong[]{0x0000050000002000UL,0x6F4E86D000000100UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_type_qualifier_in_synpred157_ObjectiveC2ansi1982 = new BitSet(new ulong[]{0x0000050000002000UL,0x6F4E86D000000100UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_abstract_declarator_in_synpred157_ObjectiveC2ansi1985 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_abstract_declarator_suffix_in_synpred158_ObjectiveC2ansi1998 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_40_in_synpred159_ObjectiveC2ansi1992 = new BitSet(new ulong[]{0x0000070000000000UL,0x0000000000000100UL});
    public static readonly BitSet FOLLOW_abstract_declarator_in_synpred159_ObjectiveC2ansi1994 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_synpred159_ObjectiveC2ansi1996 = new BitSet(new ulong[]{0x0000010000000000UL,0x0000000000000100UL});
    public static readonly BitSet FOLLOW_abstract_declarator_suffix_in_synpred159_ObjectiveC2ansi1998 = new BitSet(new ulong[]{0x0000010000000002UL,0x0000000000000100UL});
    public static readonly BitSet FOLLOW_declaration_in_synpred176_ObjectiveC2ansi2176 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_112_in_synpred178_ObjectiveC2ansi2205 = new BitSet(new ulong[]{0x0108052001CA2A50UL,0x00B069200014210AUL,0x0000000000020898UL});
    public static readonly BitSet FOLLOW_statement_in_synpred178_ObjectiveC2ansi2207 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_40_in_synpred220_ObjectiveC2ansi2676 = new BitSet(new ulong[]{0x6000000000002000UL,0x6F4E86D000000005UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_type_name_in_synpred220_ObjectiveC2ansi2678 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_synpred220_ObjectiveC2ansi2680 = new BitSet(new ulong[]{0x0100052001CA2A50UL,0x000000000014010AUL,0x0000000000000090UL});
    public static readonly BitSet FOLLOW_cast_expression_in_synpred220_ObjectiveC2ansi2682 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_40_in_synpred225_ObjectiveC2ansi2731 = new BitSet(new ulong[]{0x6000000000002000UL,0x6F4E86D000000005UL,0x000000000001F362UL});
    public static readonly BitSet FOLLOW_type_name_in_synpred225_ObjectiveC2ansi2733 = new BitSet(new ulong[]{0x0000020000000000UL});
    public static readonly BitSet FOLLOW_41_in_synpred225_ObjectiveC2ansi2735 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_implementation_definition_list_in_synpred34_ObjectiveC2ansi314 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_implementation_definition_list_in_synpred35_ObjectiveC2ansi346 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_struct_declaration_in_synpred43_ObjectiveC2ansi544 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_function_definition_in_synpred5_ObjectiveC2ansi59 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_function_definition_in_synpred55_ObjectiveC2ansi703 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_declaration_in_synpred56_ObjectiveC2ansi707 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_declaration_in_synpred6_ObjectiveC2ansi63 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_parameter_list_in_synpred63_ObjectiveC2ansi782 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_class_interface_in_synpred7_ObjectiveC2ansi68 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_class_name_in_synpred78_ObjectiveC2ansi883 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000400000UL});
    public static readonly BitSet FOLLOW_protocol_reference_list_in_synpred78_ObjectiveC2ansi887 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_class_implementation_in_synpred8_ObjectiveC2ansi72 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_category_interface_in_synpred9_ObjectiveC2ansi76 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_expression_in_synpred96_ObjectiveC2ansi1031 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_class_name_in_synpred97_ObjectiveC2ansi1036 = new BitSet(new ulong[]{0x0000000000000002UL});

}
